Se vuoi rimanere con il carattere di sottolineatura in modo che la tua funzione del predicato possa essere più flessibile, ecco 2 idee.
Metodo 1
Poiché il predicato per _.findriceve sia il valore che l'indice di un elemento, puoi utilizzare l'effetto collaterale per recuperare l'indice, in questo modo:
var idx;
_.find(tv, function(voteItem, voteIdx){
if(voteItem.id == voteID){ idx = voteIdx; return true;};
});
Metodo 2
Guardando la fonte del carattere di sottolineatura, ecco come _.findviene implementato:
_.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;
};
Per renderlo una findIndexfunzione, è sufficiente sostituire la riga result = value;con result = index;Questa è la stessa idea del primo metodo. L'ho incluso per sottolineare che il carattere di sottolineatura utilizza anche effetti collaterali da implementare _.find.