在ES5中查找第一个带有回调的匹配元素

Finding the first matching element with a callback in ES5

本文关键字:回调 元素 ES5 查找 第一个      更新时间:2023-09-26

是否有一个内置的数组方法,我可以提供一个匹配函数,它会返回第一个匹配?

var first = [1,2].whatIsThisFunction(function(v) { return v === 1; }); // 1

您可以使用some()函数:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some

它对每个条目应用回调,并在第一次匹配时返回。

var myArray = [...];
function callback(item){
    // Code
}
myArray.some(callback);

很容易设置:看看这个小提琴。

var first = [6,4,2,3,5];
var match;
function isOdd(item){
    console.log(item);
    if(item % 2 === 1){
        match = item;
        return true;
    }
}
first.some(isOdd);
console.log("First match is :"+match);

考虑:

  • indexOf:不回调,返回项的索引,或-1
  • map:回调,返回相同长度的数组,而不是项目本身
  • some/every:回调,如果发现则返回true,否则返回false
  • filter:回调,返回包含过滤项的新数组
  • forEach:回调,不返回任何东西,重复不必要的测试indexOf
  • reduce:回调,返回任何东西,如果找到,可以将返回值作为参数返回和快捷方式。

就是这样:

alert([1, 2, 7].reduce(function (r, _, __, o) {
    return r || o[o.indexOf(7)];
}, undefined));

没有indexOf的版本:

function getFirstValueFn(v) {
    return function (r, a) {
        return (a === v || r) && a;
    };
}
alert([1, 2, 0, 7].reduce(getFirstValueFn(0), undefined));  // 0
alert([1, 2, 0, 7].reduce(getFirstValueFn(7), undefined));  // 7
alert([1, 2, 0, 7].reduce(getFirstValueFn(42), undefined)); // undefined