是否存在找到与某个通用谓词匹配的第一个数组元素的现有函数?
$.fn.findFirstMatching = function(predicate) {
var result;
$.each(this, function(index, value) {
if (predicate(index, value)) {
result = {index: index, value: value};
}
});
if (result) {
return result;
}
};
答案 0 :(得分:17)
另一种解决方案是:
$.grep(yourArray, function (value, index) { return value == 42 } )[0]
请注意,参数的顺序应为value, index
当然,使用 _underscore 会更加优雅和高效(因为 $。grep 将谓词应用于数组的所有项目,它不会停止第一场比赛),但无论如何:)
答案 1 :(得分:16)
从ES2015开始,您可以使用Array.prototype.find
使用它的一个例子如下:
// outputs the first odd number
console.log([2,4,10,5,7,20].find(x => x%2))
答案 2 :(得分:11)
如果您使用underscore.js,则可以使用find方法。它甚至适用于存储元素集合的jQuery对象而没有问题。
_.find(array, function(value,index) { /* predicate */ });
但除了这个额外的(但很小的)库之外,你需要自己编写它。
答案 3 :(得分:1)
自定义实现实际上可能很短且仍然可读:
function findFirst(array, predicate) {
for (var i = 0; i < array.length; i++) if (predicate(array[i])) return array[i];
}
这将返回匹配谓词(或未定义)的第一个项目,然后停止迭代 - 这对于大型数组或谓词函数很复杂可能很方便。
答案 4 :(得分:-2)
您可以轻松找到搜索元素的索引。