1. ホーム
  2. ジャバスクリプト

[解決済み】JavaScriptでboolean条件に一致する配列の最初の要素を見つけるには?

2022-03-28 07:42:45

質問

与えられた条件にマッチするJS配列の最初の要素を見つける既知のビルトイン/エレガントな方法があるのかどうか疑問に思っています。C#では次のようになります。 リスト.検索 .

今まではこのように2つの機能のコンボを使っていました。

// 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 には、多くの関数型配列メソッドがあります。 もしかしたら、すでにこのようなものがあるのでは?多くの人がこのようなものを常に実装しなければならないのでしょうね...。

解決方法は?

ES6以降では、ネイティブの find メソッド これは、最初のマッチを見つけると配列の列挙を停止してその値を返します。

const result = someArray.find(isNotNullNorUndefined);


古い回答です。

これらを阻止するために、回答を投稿する必要があります filter を提案します :-)

ECMAScript には関数型の配列メソッドがたくさんあるので、もしかしたらこのようなものがすでにあるのかもしれませんね?

を使用することができます。 some Arrayメソッド を使用して、ある条件に達するまで (そして停止するまで) 配列を繰り返し処理します。残念ながら、このメソッドは条件を満たしたかどうかを返すだけで、 どの要素で (あるいはどのインデックスで) 条件を満たしたかを返すわけではありません。そこで、少し修正する必要があります。

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