与えられた条件に一致する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には関数型の配列メソッドがたくさんあるおそらく、すでにこのようなものがあるのではないでしょうか。多くの人がこのようなものを常に実装しなければならないのだと思います...
ベストアンサー1
ES6以降ではネイティブfind
方法配列の場合、最初の一致が見つかると配列の列挙を停止し、値を返します。
const result = someArray.find(isNotNullNorUndefined);
古い回答:
これらの提案を止めるには、回答を投稿する必要がありますfilter
:-)
ECMAScript には関数型の配列メソッドがたくさんあるので、おそらくこれに似たものがすでに存在しているのではないでしょうか。
あなたはsome
配列法条件が満たされるまで配列を反復処理し、その後停止します。残念ながら、条件が 1 回満たされたかどうかしか返されず、どの要素 (またはどのインデックス) で満たされたかは返されません。そのため、少し修正する必要があります。
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);