19

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

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

5 回答 5

24

从 ES2015 开始,您可以使用Array.prototype.find

使用它的示例如下所示:

// outputs the first odd number
console.log([2,4,10,5,7,20].find(x => x%2))
于 2016-04-20T13:20:20.743 回答
17

另一种解决方案是:

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

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

jQuery.grep 的文档。

当然,使用_underscore更加优雅和高效(因为$.grep将谓词应用于数组的所有项目,它不会在第一次匹配后停止),但无论如何:)

于 2014-01-20T21:14:08.317 回答
11

如果你使用underscore.js,那么你可以使用find方法。它甚至适用于存储元素集合的 jQuery 对象而没有问题。

_.find(array, function(value,index) { /* predicate */ });

但是除了这个额外的(但很小的)库之外,您还需要自己编写它。

于 2012-07-05T12:34:09.810 回答
1

自定义实现实际上可能很短并且仍然可读:

function findFirst(array, predicate) {
  for (var i = 0; i < array.length; i++) if (predicate(array[i])) return array[i];
}

这将返回匹配谓词(或未定义)的第一项,然后停止迭代——这对于大型数组或谓词函数很复杂可能很方便。

于 2017-02-25T15:02:59.437 回答
-2

使用jquery的inArray方法

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

于 2012-07-05T12:36:53.007 回答