在ES5中使用回调查找第一个匹配元素

时间:2015-08-04 08:48:45

标签: javascript

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

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

2 个答案:

答案 0 :(得分:0)

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

它对每个项目应用回调,并在第一场比赛时返回。

var myArray = [...];

function callback(item){
    // Code
}

myArray.some(callback);

设置非常简单:have a look at this fiddle.

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);

答案 1 :(得分:0)

<强>考虑

  • indexOf:没有回调,返回项目的索引,或-1
  • map:callback,返回长度相同的数组,而不是项目本身
  • some / every:callback,如果发现则返回true
  • filter:callback,返回带有过滤项目的新数组
  • 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