Якщо ви хочете дотримуватися підкреслення, щоб ваша функція предикатів могла бути гнучкішою, ось 2 ідеї.
Спосіб 1
Оскільки предикат для _.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.