给定一个数组和谓词,找到第一个匹配元素

时间:2012-07-05 12:28:42

标签: javascript jquery

是否存在找到与某个通用谓词匹配的第一个数组元素的现有函数?

$.fn.findFirstMatching = function(predicate) {
    var result;
    $.each(this, function(index, value) {
        if (predicate(index, value)) {
            result = {index: index, value: value};
        }
    });
    if (result) {
        return result;
    }
};

5 个答案:

答案 0 :(得分:17)

另一种解决方案是:

$.grep(yourArray, function (value, index) { return value == 42 } )[0]

请注意,参数的顺序应为value, index

Docs for jQuery.grep.

当然,使用 _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)

Use inArray method of jquery

您可以轻松找到搜索元素的索引。