一尘不染

如何在JavaScript中找到匹配布尔条件的数组的第一个元素?

javascript

我想知道是否有一种已知的,内置的/优雅的方法来找到匹配给定条件的JS数组的第一个元素。AC#等效项为List.Find。

到目前为止,我一直在使用这样的两功能组合:

// Returns the first element of an array that satisfies given predicate
Array.prototype.findFirst = function (predicateCallback) {
    if (typeof predicateCallback !== 'function') {
        return undefined;
    }

    for (var i = 0; i < arr.length; i++) {
        if (i in this && predicateCallback(this[i])) return this[i];
    }

    return undefined;
};

// Check if element is not undefined && not null
isNotNullNorUndefined = function (o) {
    return (typeof (o) !== 'undefined' && o !== null);
};

然后我可以使用:

var result = someArray.findFirst(isNotNullNorUndefined);

但是,既然ECMAScript中有[太多的函数式数组方法,也许已经有这样的东西了?我想很多人必须一直执行这样的事情…


阅读 377

收藏
2020-05-01

共1个答案

一尘不染

从ES6开始,存在数组的本机find方法。一旦找到第一个匹配项并返回值,此操作将停止枚举数组。

const result = someArray.find(isNotNullNorUndefined);

旧答案:

我必须发布答案才能停止这些filter建议:-)

由于ECMAScript中有许多功能样式的数组方法,也许已经有类似的东西了?

您可以使用someArray方法来迭代数组,直到满足条件为止(然后停止)。不幸的是,它将仅返回是否满足条件一次,而不返回满足条件的元素(或索引)。因此,我们必须对其进行一些修改:

function find(arr, test, ctx) {
    var result = null;
    arr.some(function(el, i) {
        return test.call(ctx, el, i, arr) ? ((result = el), true) : false;
    });
    return result;
}



var result = find(someArray, isNotNullNorUndefined);
2020-05-01