Suchen Sie den Array-Index eines Objekts mit einem bestimmten Schlüsselwert im Unterstrich
Lesezeit: 4 Minuten
Im Unterstrich kann ich erfolgreich ein Element mit einem bestimmten Schlüsselwert finden
var tv = [{id:1},{id:2}]
var voteID = 2;
var data = _.find(tv, function(voteItem){ return voteItem.id == voteID; });
//data = { id: 2 }
aber wie finde ich heraus, an welchem Array-Index das Objekt aufgetreten ist?
mögliches Duplikat von Gibt es einen indexOf in Javascript, um ein Array mit benutzerdefinierter Vergleichsfunktion zu durchsuchen
– Bergi
7. Februar 2014 um 15:10 Uhr
Danke – das ist nützlich – aber in dem aufgeführten Beispiel suchen Sie nach einer einzelnen Zahl in einem Array von Zahlen – ich suche nach einem Schlüsselwert in einem Array von Objekten. Wird diese Funktion das berücksichtigen?
– mheavers
7. Februar 2014 um 15:22 Uhr
Ob es sich um einen numerischen Test oder Ihr Eigenschaftsgleichheitsprädikat handelt, spielt keine Rolle, ja.
– Bergi
7. Februar 2014 um 15:24 Uhr
Versuchen findIndex: var dataIndex = _.findIndex(tv, { id: voteID })
– Tom Söderlund
9. Juli 2017 um 13:23 Uhr
Bitte erwägen Sie, die Antwort zu akzeptieren, die eine Unterstrich-Lösung gibt, wie in der Frage gefordert.
– Benutzer2493235
17. September 2017 um 20:31 Uhr
Ropez
findIndex wurde in 1.8 hinzugefügt:
index = _.findIndex(tv, function(voteItem) { return voteItem.id == voteID })
Beim Unterstrich bin ich mir nicht sicher, aber in Lodash brauchen Sie einfach keine anonyme Funktion index = _.findIndex(tv, {id: voteID}) funktioniert, funktioniert auch, wenn die tv Sammlung hat kompliziertere Werte (mehr als nur eine id Eigentum)
– Scott Jungwirth
9. Oktober 2015 um 21:25 Uhr
Nur ein Punkt mit Zupfen ist so viel langsamer. Ich wegen seiner zusätzlichen Traverse. jsperf.com/compare-find-index
– Farshid Saberi
8. November 2016 um 6:26 Uhr
Lo-Dashdas Underscore erweitert, hat findIndex Methode, die den Index einer bestimmten Instanz finden kann, oder durch ein bestimmtes Prädikat oder gemäß den Eigenschaften eines bestimmten Objekts.
In deinem Fall würde ich tun:
var index = _.findIndex(tv, { id: voteID });
Versuche es.
findIntex ist eine Methode von lo-dash, nicht von underscore
– Wallysson Nunes
8. Januar 2015 um 16:40 Uhr
@WallyssonNunes Genau das habe ich geschrieben – “Lo-Dash, das Underscore erweitert, hat die Methode findIndex”
– Splitter
10. Januar 2015 um 20:57 Uhr
Dies ist ab Version 1.8.0 jetzt Teil der Standardbibliothek für Unterstriche: underscorejs.org/#1.8.0
– Gage-Händler
26. Februar 2015 um 21:21 Uhr
lastoneisbearfood
Wenn Sie beim Unterstrich bleiben möchten, damit Ihre Prädikatfunktion flexibler ist, hier sind 2 Ideen.
Methode 1
Da das Prädikat für _.find erhält sowohl den Wert als auch den Index eines Elements, können Sie den Index wie folgt abrufen:
Um dies zu machen, a findIndex Funktion, ersetzen Sie einfach die Zeile result = value; mit result = index; Dies ist die gleiche Idee wie bei der ersten Methode. Ich habe es eingefügt, um darauf hinzuweisen, dass der Unterstrich Nebeneffekte zur Implementierung verwendet _.find auch.
tewathia
Ich weiß nicht, ob es eine vorhandene Unterstrichmethode gibt, die dies tut, aber Sie können dasselbe Ergebnis mit einfachem Javascript erzielen.
Array.prototype.getIndexBy = function (name, value) {
for (var i = 0; i < this.length; i++) {
if (this[i][name] == value) {
return i;
}
}
return -1;
}
Dann können Sie einfach tun:
var data = tv[tv.getIndexBy("id", 2)]
Wenn Ihre Zielumgebung ES2015 unterstützt (oder Sie einen Transpile-Schritt haben, zB mit Babel), können Sie das native Array.prototype.findIndex() verwenden.
var tv = [{id:1},{id:2}]
var voteID = 2;
var data = _.find(tv, function(voteItem){ return voteItem.id == voteID; });
var index=_.indexOf(tv,data);
Joyrexus
Halten Sie es einfach:
// Find the index of the first element in array
// meeting specified condition.
//
var findIndex = function(arr, cond) {
var i, x;
for (i in arr) {
x = arr[i];
if (cond(x)) return parseInt(i);
}
};
var idIsTwo = function(x) { return x.id == 2 }
var tv = [ {id: 1}, {id: 2} ]
var i = findIndex(tv, idIsTwo) // 1
Oder, für Nicht-Hasser, die CoffeeScript-Variante:
findIndex = (arr, cond) ->
for i, x of arr
return parseInt(i) if cond(x)
besser wäre return parseInt(i) for i, x of array when cond(x)
– Benutzer229044 ♦
12. August 2014 um 18:51 Uhr
Wie ist das einfacher als vorherige Antworten?
– ncubica
23. Juni 2015 um 3:19 Uhr
11860500cookie-checkSuchen Sie den Array-Index eines Objekts mit einem bestimmten Schlüsselwert im Unterstrichyes
mögliches Duplikat von Gibt es einen indexOf in Javascript, um ein Array mit benutzerdefinierter Vergleichsfunktion zu durchsuchen
– Bergi
7. Februar 2014 um 15:10 Uhr
Danke – das ist nützlich – aber in dem aufgeführten Beispiel suchen Sie nach einer einzelnen Zahl in einem Array von Zahlen – ich suche nach einem Schlüsselwert in einem Array von Objekten. Wird diese Funktion das berücksichtigen?
– mheavers
7. Februar 2014 um 15:22 Uhr
Ob es sich um einen numerischen Test oder Ihr Eigenschaftsgleichheitsprädikat handelt, spielt keine Rolle, ja.
– Bergi
7. Februar 2014 um 15:24 Uhr
Versuchen
findIndex
:var dataIndex = _.findIndex(tv, { id: voteID })
– Tom Söderlund
9. Juli 2017 um 13:23 Uhr
Bitte erwägen Sie, die Antwort zu akzeptieren, die eine Unterstrich-Lösung gibt, wie in der Frage gefordert.
– Benutzer2493235
17. September 2017 um 20:31 Uhr