true
各要素で呼び出された関数が を返すか を返すかに基づいて 2 つに分割したい JavaScript 配列がありますfalse
。基本的にこれは ですarray.filter
が、フィルタリングされた要素も手元に用意しておきたいのです。外。
array.forEach
現在、各要素で述語関数を使用して呼び出す予定です。これが true か false かに応じて、現在の要素を 2 つの新しい配列のいずれかにプッシュします。これを行うよりエレガントな方法、またはより良い方法はありますか?たとえば、array.filter
が を返す前に要素を別の配列にプッシュする などでしょうか?false
ベストアンサー1
ES6 では、reduce でスプレッド構文を利用できます。
function partition(array, isValid) {
return array.reduce(([pass, fail], elem) => {
return isValid(elem) ? [[...pass, elem], fail] : [pass, [...fail, elem]];
}, [[], []]);
}
const [pass, fail] = partition(myArray, (e) => e > 5);
または 1 行で次のように記述します。
const [pass, fail] = a.reduce(([p, f], e) => (e > 5 ? [[...p, e], f] : [p, [...f, e]]), [[], []]);