Im Unterstrich kann ich erfolgreich einen Artikel 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, an welchem Array-Index dieses Objekt aufgetreten ist?
javascript
underscore.js
mheavers
quelle
quelle
findIndex
:var dataIndex = _.findIndex(tv, { id: voteID })
Antworten:
Ich weiß nicht, ob es eine Unterstrichmethode gibt, die dies tut, aber Sie können das gleiche Ergebnis mit einfachem Javascript erzielen.
Dann können Sie einfach tun:
var data = tv[tv.getIndexBy("id", 2)]
quelle
return -1;
standardmäßig ein?findIndex
wurde in 1.8 hinzugefügt:Siehe: http://underscorejs.org/#findIndex
Alternativ funktioniert dies auch, wenn es Ihnen nichts ausmacht, eine andere temporäre Liste zu erstellen:
Siehe: http://underscorejs.org/#pluck
quelle
index = _.findIndex(tv, {id: voteID})
funktionieren, funktioniert auch, wenn dietv
Sammlung kompliziertere Werte hat (mehr als nur eineid
Eigenschaft)Wenn Sie beim Unterstrich bleiben möchten, damit Ihre Prädikatfunktion flexibler ist, finden Sie hier zwei Ideen.
Methode 1
Da das Prädikat für
_.find
sowohl den Wert als auch den Index eines Elements empfängt, können Sie den Index mithilfe des Nebeneffekts wie folgt abrufen:Methode 2
Mit Blick auf die Unterstrichquelle wird
_.find
folgendermaßen implementiert:Um dies zu einer
findIndex
Funktion zu machen , ersetzen Sie einfach die Zeileresult = value;
durchresult = index;
Dies ist die gleiche Idee wie bei der ersten Methode. Ich habe es aufgenommen, um darauf hinzuweisen, dass der Unterstrich auch Nebeneffekte zur Implementierung verwendet_.find
.quelle
Lo-Dash , das Underscore erweitert, verfügt über findIndex Methode, mit der der Index einer bestimmten Instanz oder anhand eines bestimmten Prädikats oder gemäß den Eigenschaften eines bestimmten Objekts ermittelt werden kann.
In Ihrem Fall würde ich tun:
Versuche es.
quelle
Wenn Ihre Zielumgebung ES2015 unterstützt (oder Sie einen Transpile-Schritt haben, z. B. mit Babel), können Sie den nativen Array.prototype.findIndex () verwenden.
Anhand Ihres Beispiels
quelle
Sie können die
indexOf
Methode von verwendenlodash
quelle
Halte es einfach:
Oder für Nicht-Hasser die CoffeeScript-Variante:
quelle
return parseInt(i) for i, x of array when cond(x)
Dies soll den
lodash
Benutzern helfen . Überprüfen Sie, ob Ihr Schlüssel vorhanden ist, indem Sie Folgendes tun:quelle
Die einfachste Lösung ist die Verwendung von lodash:
const _ = require ('lodash');
quelle
Wenn Sie mehrere Übereinstimmungen erwarten und daher ein Array zurückgeben müssen, versuchen Sie Folgendes:
Wenn der Eigenschaftswert eindeutig ist und Sie den Index der Übereinstimmung benötigen, versuchen Sie Folgendes:
quelle
quelle
Ich habe einen ähnlichen Fall, aber im Gegenteil ist es, den verwendeten Schlüssel basierend auf dem Index eines bestimmten Objekts zu finden. Ich konnte eine Lösung im Unterstrich finden, indem ich ein
Object.values
Objekt in ein Array zurückgab, um den aufgetretenen Index zu erhalten.quelle