indexOf-Methode in einem Objekt-Array?

Was ist die beste Methode, um den Index eines Arrays zu ermitteln, das Objekte enthält?

Stellen Sie sich folgendes Szenario vor:

var hello = {
    hello: 'world',
    foo: 'bar'
};
var qaz = {
    hello: 'stevie',
    foo: 'baz'
}

var myArray = [];
myArray.push(hello,qaz);

Nun möchte ich den indexOf des Objekts haben, dessen hello Eigenschaft 'stevie' ist, was in diesem Beispiel 1 wäre.

Ich bin ein ziemlicher Neuling in JavaScript und ich weiß nicht, ob es eine einfache Methode gibt oder ob ich eine eigene Funktion dafür entwickeln sollte.

Array.prototype.findIndex wird in allen Browsern außer dem IE (non-edge) unterstützt. Aber die polyfill vorgesehen ist nett.

var indexOfStevie = myArray.findIndex(i => i.hello === "stevie");

Die Lösung mit map 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 stoppt, sobald eine Übereinstimmung gefunden wurde.


There's nicht wirklich einen prägnanten Weg **(wenn devs hatte über IE8 zu kümmern)**, aber hier's 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:

  1. Verwenden Sie nicht for...in Schleifen auf Arrays
  2. Vergewissern Sie sich, dass Sie die Schleife verlassen oder aus der Funktion zurückkehren, sobald Sie Ihre "Nadel" gefunden haben;
  3. Seien Sie vorsichtig mit der Objektgleichheit

Zum Beispiel,

var a = {obj: 0};
var b = [a];
b.indexOf({obj: 0}); // -1 not found
Kommentare (8)
var idx = myArray.reduce( function( cur, val, index ){

    if( val.hello === "stevie" && cur === -1 ) {
        return index;
    }
    return cur;

}, -1 );
Kommentare (0)

Siehe dieses Beispiel: http://jsfiddle.net/89C54/

for (i = 0; i < myArray.length; i++) {
    if (myArray[i].hello === 'stevie') {
        alert('position: ' + i);
        return;
    }
}

Die Zählung beginnt bei Null.

Kommentare (0)