716 Stimmen

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);

Jetzt würde ich gerne die indexOf das Objekt, das hello Eigenschaft ist 'stevie' die in diesem Beispiel wie folgt aussehen würde 1 .

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

15voto

Nathan Zaetta Punkte 383

Oder ein Prototyp:

Array.prototype.indexOfObject = function arrayObjectIndexOf(property, value) {
    for (var i = 0, len = this.length; i < len; i++) {
        if (this[i][property] === value) return i;
    }
    return -1;
}

myArr.indexOfObject("name", "stevie");

10voto

SpiRail Punkte 1363

Die meisten anderen Antworten hier sind jedoch gültig. Manchmal ist es am besten, eine kurze, einfache Funktion in der Nähe der Stelle zu erstellen, an der Sie sie verwenden werden.

// indexOf wrapper for the list of objects
function indexOfbyKey(obj_list, key, value) {
    for (index in obj_list) {
        if (obj_list[index][key] === value) return index;
    }
    return -1;
}
// Find the string in the list (default -1)
var test1 = indexOfbyKey(object_list, 'name', 'Stevie');
var test2 = indexOfbyKey(object_list, 'last_name', 'some other name');

Das hängt davon ab, was für Sie wichtig ist. Es kann Codezeilen einsparen und sehr clever sein, einen Einzeiler zu verwenden, oder eine allgemeine Lösung irgendwo unterzubringen, die verschiedene Randfälle abdeckt. Aber manchmal ist es besser, einfach zu sagen: "Hier habe ich es so gemacht", als zukünftigen Entwicklern zusätzliche Reverse-Engineering-Arbeiten zu überlassen. Vor allem, wenn man sich selbst als "Neuling" betrachtet, wie in Ihrer Frage.

9voto

John Klimov Punkte 151

Ich habe mehrere Methoden verglichen und ein Ergebnis mit dem schnellsten Weg zur Lösung dieses Problems erhalten. Es ist ein for Schleife. Es ist 5+ mal schneller als jede andere Methode.

Hier ist die Seite für den Test: https://jsbench.me/9hjewv6a98

9voto

Caio Koiti Punkte 79

Wenn Ihr Objekt dasselbe Objekt ist wie das, das Sie im Array verwenden, sollten Sie den Index des Objekts auf dieselbe Weise abrufen können, wie wenn es eine Zeichenkette wäre.

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

var qazCLONE = { // new object instance and same structure
    hello: 'stevie',
    foo: 'baz'
}

var myArray = [hello,qaz];

myArray.indexOf(qaz) // should return 1
myArray.indexOf(qazCLONE) // should return -1

9voto

Können Sie findIndex() Methode:

cosnt myIndex=myArray.findIndex(el=>el.hello==='stevie')

Wenn myIndex < 0 ist, bedeutet das, dass es nicht existiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X