重複している要素を含む配列を検索した時、その全ての要素のインデックスを取得する方法です。
あまり綺麗な方法ではないかもしれませんが…とりあえず求めている結果は取得できました。
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
メソッドを使った方法だと思います。
以上、配列から検索条件に一致する全ての要素のインデックスを取得する方法でした。
ご参考になれば幸いです。