Jeśli chcesz pozostać przy podkreśleniu, aby Twoja funkcja predykatu była bardziej elastyczna, oto 2 pomysły.
Metoda 1
Ponieważ predykat dla _.find
otrzymuje zarówno wartość, jak i indeks elementu, możesz użyć efektu ubocznego do pobrania indeksu, na przykład:
var idx;
_.find(tv, function(voteItem, voteIdx){
if(voteItem.id == voteID){ idx = voteIdx; return true;};
});
Metoda 2
Patrząc na źródło podkreślenia, jest _.find
to realizowane w następujący sposób:
_.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;
};
Aby zrobić to na findIndex
funkcję, wystarczy zamienić linię result = value;
z result = index;
ta idea jest taka sama jak w pierwszej metodzie. Dodałem to, aby zwrócić uwagę, że podkreślenie również wykorzystuje efekt uboczny _.find
.