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:
var idx;
_.find(tv, function(voteItem, voteIdx){
if(voteItem.id == voteID){ idx = voteIdx; return true;};
});
Methode 2
Mit Blick auf die Unterstrichquelle wird _.find
folgendermaßen implementiert:
_.find = _.detect = function(obj, predicate, context) {
var result;
any(obj, function(value, index, list) {
if (predicate.call(context, value, index, list)) {
result = value;
return true;
}
});
return result;
};
Um dies zu einer findIndex
Funktion zu machen , ersetzen Sie einfach die Zeile result = value;
durch result = 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
.