Der funktionale Ansatz
Alle coolen Kids machen heutzutage funktionale Programmierung ( Hallo React-Benutzer ), also dachte ich, ich würde die funktionale Lösung geben. Meiner Ansicht nach ist es tatsächlich viel schöner als das bisher vorgeschlagene Imperatival forund die eachLoops, und mit der ES6-Syntax ist es ziemlich elegant.
Aktualisieren
Es gibt jetzt eine großartige Möglichkeit, dies zu tun, findIndexdie eine Funktion übernimmt, die zurückgibt true/ darauf falsebasiert, ob das Array-Element übereinstimmt (wie immer jedoch auf Browserkompatibilität prüfen).
var index = peoples.findIndex(function(person) {
return person.attr1 == "john"
}
Mit der ES6-Syntax können Sie Folgendes schreiben:
var index = peoples.findIndex(p => p.attr1 == "john")
Der (alte) funktionale Ansatz
TL; DR
Wenn Sie suchen, indexwo Sie peoples[index].attr1 == "john"verwenden können:
var index = peoples.map(function(o) { return o.attr1; }).indexOf("john");
Erläuterung
Schritt 1
Verwenden Sie .map()diese Option , um ein Array von Werten für einen bestimmten Schlüssel abzurufen:
var values = object_array.map(function(o) { return o.your_key; });
Die obige Zeile führt Sie von hier aus:
var peoples = [
{ "attr1": "bob", "attr2": "pizza" },
{ "attr1": "john", "attr2": "sushi" },
{ "attr1": "larry", "attr2": "hummus" }
];
Bis hierhin:
var values = [ "bob", "john", "larry" ];
Schritt 2
Jetzt verwenden wir nur .indexOf()noch den Index des gewünschten Schlüssels (der natürlich auch der Index des gesuchten Objekts ist):
var index = values.indexOf(your_value);
Lösung
Wir kombinieren alle oben genannten:
var index = peoples.map(function(o) { return o.attr1; }).indexOf("john");
Oder wenn Sie die ES6-Syntax bevorzugen:
var index = peoples.map((o) => o.attr1).indexOf("john");
Demo:
var peoples = [
{ "attr1": "bob", "attr2": "pizza" },
{ "attr1": "john", "attr2": "sushi" },
{ "attr1": "larry", "attr2": "hummus" }
];
var index = peoples.map(function(o) { return o.attr1; }).indexOf("john");
console.log("index of 'john': " + index);
var index = peoples.map((o) => o.attr1).indexOf("larry");
console.log("index of 'larry': " + index);
var index = peoples.map(function(o) { return o.attr1; }).indexOf("fred");
console.log("index of 'fred': " + index);
var index = peoples.map((o) => o.attr2).indexOf("pizza");
console.log("index of 'pizza' in 'attr2': " + index);