【JavaScript】配列から検索条件に一致する全ての要素のインデックスを取得する方法

重複している要素を含む配列を検索した時、その全ての要素のインデックスを取得する方法です。
あまり綺麗な方法ではないかもしれませんが…とりあえず求めている結果は取得できました。

filter メソッドの使い方について参考にさせていただいたサイトはこちら。

【JavaScript入門】filterで配列のデータを抽出する方法 | 侍エンジニア塾ブログ(Samurai Blog) – プログラミング入門者向けサイト
https://www.sejuku.net/blog/21887

 

サンプルコードはこちら。

let data = [検索したい配列];
var indexs = [];
data.filter(function(value, index, array) {
    if (検索条件) {
        indexs.push(index);
    }
}

indexOf メソッドだと、一番最初に一致した要素のインデックスのみしか取得できないので、filter メソッドを使っています。
そして、検索条件に一致した要素のインデックスは、indexs という配列に追加されるので、後は任意の処理でお使いください。

…が、これ filter メソッドではなく、 map メソッドを使うべきな気が…。
参考サイトによると、「filter メソッドは条件に一致した要素だけを抽出して新しい配列として格納する」とあるので、正しい使い方ではないかも?

ということで、map メソッドを使って書くなら下記の通りです。

let data = [検索したい配列];
var indexs = [];
data.map(function(value, index, array) {
    if (検索条件) {
        indexs.push(index);
    }
}

どちらでも正しい結果は得られるので、後は好みの問題な気もしますね…。
ただ、使い方からすると、正しいのはおそらく map メソッドを使った方法だと思います。

 

以上、配列から検索条件に一致する全ての要素のインデックスを取得する方法でした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG