🐡

【JavaScript】配列で条件に合致する値のindexを全て取得したい

2021/02/21に公開2

概要

あまりケースとしては多く無いと思うのですが、配列の中で条件に合致した時に合致した位置(index)を取得する時の話です。標準のメソッドではfindIndexというのが用意されているのですが、これは最初に見つかった要素のindexのみを返します。これを条件に合致した要素全てのindexを取得したい場合はどうするか、というのを書いてみます。

対応

Return index value from filter method javascriptの記事で色々な方法が紹介されていますが、flatMapを使う方法が一番短く書けるように感じました。flatMapについてはmapとflatMapという便利メソッドを理解するの記事が参考になります。

実装サンプル

配列に格納されている数値で、偶数のもののみ抽出してindexを取得して出力します。

filterIndex.js
const sampleArray = [1, 10, 4, 9, 12, 11, 15, 21, 23, 8];
const resultIndex = sampleArray.flatMap((s, i) => (s % 2 === 0 ? i : []));
console.log(resultIndex);

Discussion

standard softwarestandard software

flatMapというものの機能は覚えていなかったのですが、mapとfilterでも簡単でした。

const result = sampleArray.map((e, i) => {
  return e % 2 === 0 ? i : -1
}).filter((e) => {
  return e !== -1
})
// [1, 2, 4, 9]
なかつがわなかつがわ

コメントありがとうございます。
たしかにmapとfilterでもシンプルですね。flatMap普段使わなければ、mapとfilterで実装しても全然良さそうな気がする。