フィルター関数で配列を分割する 質問する

フィルター関数で配列を分割する 質問する

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]]), [[], []]);

おすすめ記事