Se você deseja manter o sublinhado para que sua função de predicado seja mais flexível, aqui estão 2 ideias.
Método 1
Como o predicado para _.findrecebe o valor e o índice de um elemento, você pode usar o efeito colateral para recuperar o índice, como este:
var idx;
_.find(tv, function(voteItem, voteIdx){
if(voteItem.id == voteID){ idx = voteIdx; return true;};
});
Método 2
Olhando para a fonte de sublinhado, é assim que _.findé implementado:
_.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;
};
Para tornar isso uma findIndexfunção, basta substituir a linha result = value;por result = index;Esta é a mesma ideia do primeiro método. Eu o incluí para apontar que o sublinhado também usa efeitos colaterais para implementar _.find.