Если вы хотите сохранить подчеркивание, чтобы ваша функция предиката была более гибкой, вот 2 идеи.
Способ 1
Поскольку предикат for _.findполучает как значение, так и индекс элемента, вы можете использовать побочный эффект для получения индекса, например:
var idx;
_.find(tv, function(voteItem, voteIdx){
if(voteItem.id == voteID){ idx = voteIdx; return true;};
});
Способ 2
Если посмотреть на источник подчеркивания, то вот как _.findэто реализовано:
_.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;
};
Чтобы сделать это findIndexфункцией, просто замените строку result = value;на result = index;Это та же идея, что и в первом методе. Я добавил это, чтобы указать, что подчеркивание также использует побочный эффект для реализации _.find.