Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 给定数组和谓词,查找第一个匹配元素_Javascript_Jquery - Fatal编程技术网

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

Javascript 给定数组和谓词,查找第一个匹配元素,javascript,jquery,Javascript,Jquery,是否有一个现有函数可以查找与某个常规谓词匹配的第一个数组元素 $.fn.findFirstMatching = function(predicate) { var result; $.each(this, function(index, value) { if (predicate(index, value)) { result = {index: index, value: value}; } }); if

是否有一个现有函数可以查找与某个常规谓词匹配的第一个数组元素

$.fn.findFirstMatching = function(predicate) {
    var result;
    $.each(this, function(index, value) {
        if (predicate(index, value)) {
            result = {index: index, value: value};
        }
    });
    if (result) {
        return result;
    }
};
若你们使用,那个么你们可以使用方法。它甚至可以与存储元素集合的jQuery对象一起工作,没有问题

_.find(array, function(value,index) { /* predicate */ });
但是除了这个额外的(但很小的)库之外,您还需要自己编写它。


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

另一种解决方案是:

$.grep(yourArray, function (value, index) { return value == 42 } )[0]
请注意,参数的顺序应该是
value,index


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

从ES2015开始,您可以使用

使用它的示例如下所示:

// outputs the first odd number
console.log([2,4,10,5,7,20].find(x => x%2))

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

function findFirst(array, predicate) {
  for (var i = 0; i < array.length; i++) if (predicate(array[i])) return array[i];
}
函数findFirst(数组,谓词){
for(vari=0;i

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

inArray
方法只接受一个值,而不是谓词。看起来不错。事实证明我们已经在使用下划线了,所以它更简单。这里有一个文档供感兴趣的人参考:值得注意的是,它是
(value,index)
,而不是
jQuery。每个
的回调都接受
(index,value)
@JLRishe,jQuery文档声明顺序应该是
value,index
@Apelsin确实,你是对的。愚蠢的我,我必须假设
$。grep
$一致。每个
。我最喜欢这个答案,因为它不需要任何第三方库或框架来工作。