Array.prototype.findIndex wird in allen Browsern außer dem IE (non-edge) unterstützt. Aber die Polyfill zur Verfügung gestellt wird, ist nett.
var indexOfStevie = myArray.findIndex(i => i.hello === "stevie");
Die Lösung mit der Karte ist in Ordnung. Aber Sie iterieren bei jeder Suche über das gesamte Array. Das ist nur der schlimmste Fall für findIndex der die Iteration beendet, sobald eine Übereinstimmung gefunden wurde.
Es gibt nicht wirklich eine prägnante Art (als sich die Entwickler noch um den IE8 kümmern mussten) aber hier ist eine gemeinsame Lösung:
var searchTerm = "stevie",
index = -1;
for(var i = 0, len = myArray.length; i < len; i++) {
if (myArray[i].hello === searchTerm) {
index = i;
break;
}
}
oder als Funktion:
function arrayObjectIndexOf(myArray, searchTerm, property) {
for(var i = 0, len = myArray.length; i < len; i++) {
if (myArray[i][property] === searchTerm) return i;
}
return -1;
}
arrayObjectIndexOf(arr, "stevie", "hello"); // 1
Nur einige Anmerkungen:
- Verwenden Sie keine for...-Schleifen für Arrays
- Vergewissern Sie sich, dass Sie die Schleife verlassen oder aus der Funktion zurückkehren, sobald Sie Ihre "Nadel" gefunden haben.
- Vorsicht bei Objektgleichheit
Zum Beispiel,
var a = {obj: 0};
var b = [a];
b.indexOf({obj: 0}); // -1 not found