2016-08-01 12 views
1

Wenn ich ein Array wie folgt:Wie kann ich die Array-Position eines Objekts herausfinden, indem ich das Array durchsuche?

var array1 = 
[ 
    {"phraseId":"abc", 
    "keyword":"bb", 
    "posId":1}, 
    {"phraseId":"def", 
    "keyword":"bb", 
    "posId":1}, 
] 

Wie kann ich herausfinden, dass das Objekt mit phraseId von „def“, um die zweite Position hat?

+1

Mögliche doppelte: http://stackoverflow.com/questions/7364150/find-object-by-id-in-einem-array-of-javascript-objects –

+0

Warum können Sie keine Schleife verwenden? –

Antwort

5

Verwenden Sie natives JavaScript findIndex Methode.

var array1 = [{ 
 
    "phraseId": "abc", 
 
    "keyword": "bb", 
 
    "posId": 1 
 
}, { 
 
    "phraseId": "def", 
 
    "keyword": "bb", 
 
    "posId": 1 
 
}, ]; 
 

 
var pos = array1.findIndex(function(v) { 
 
    // set your condition for finding object    
 
    return v.phraseId == 'def'; 
 
    // add `1` since you want to count from `1`    
 
}) + 1; 
 

 
console.log("Position of the object " + pos);


Für ältere Browser check polyfill option.


Mit ES6 arrow function

var array1 = [{ 
 
    "phraseId": "abc", 
 
    "keyword": "bb", 
 
    "posId": 1 
 
}, { 
 
    "phraseId": "def", 
 
    "keyword": "bb", 
 
    "posId": 1 
 
}, ]; 
 

 
var pos = array1.findIndex(v => v.phraseId == 'def') + 1; 
 

 
console.log("Position of the object " + pos);

+2

Ich wusste nicht, dass 'findIndex' eine offizielle ECMAScript6-Sache war. Ordentlich. – StriplingWarrior

+1

Ich denke, diese Lösung besser als '.map()' weil 'findIndex()' seine native JS-Methode gibt einen Index im Array im Gegensatz zu '.map', die für Array-Iteration verwendet. Interessant, einige Benchmarks dieser beiden Methoden zu sehen. – semanser

+0

Da wir die neuesten coolen Sachen verwenden, warum schreibe es nicht einfach: 'var pos = array1.findIndex (v => v.phraseId === 'def');' –

6

Sie Ihr Objekt abbilden konnte und nur das Zielfeld zurückzukehren, und dann die in indexOf gebaut verwenden, um die Position zu bekommen:

array1.map(item => item.phraseId).indexOf('def') 
+1

Nicht absteigend, aber dies führt zu 2 Iterationen des Arrays sowie die Zuweisung von mehr Speicher für das zweite abgebildete Array, was unnötig ist. –

1

Es funktioniert auf diese Weise:

array1.forEach((elem, index) => {if (elem.phraseId === "def") 
    console.log("index = " + index); 
}); 
1

Unter der Annahme, dass Ihr Schlüssel weiß, ist, (dass Sie wissen, Sie sucht nach einem immer), dann können Sie einfach mit einer normalen for Schleife durch das Array iterieren, wenn Sie „traditionellen“ JS verwenden, oder mit einem forEach, wenn Sie ES6 verwenden. Hier ist die einfache for Implementierung.

for (var i = 0; i < array1.length; i++){ 
    if(array[i].phraseId === 'def') { 
    // we know "i" is the index, so do something... 
    } 
} 

Um es generic so dass Sie jede Array für jeden Schlüssel suchen, eine Funktion daraus machen, dass der Index zurückgibt:

function whatIndex (arr, key, val) { 
    for (var i = 0; i < arr.length; i++) { 
     if(arr[i][key] === val) { 
      return i; 
     } 
    } 
} 
Verwandte Themen