[Javascript] 配列内に複数存在する値のindexを配列で取得する方法

配列データの中で、特定の値のindex値を取得したい場合は、findIndexで簡単に取得できる。 ["a","b","c","d","e"].findIndex(e => e === "c") > 2 しかし、array.findIndex()は、最初のindex値しか取得できない。 ["a","b","a","b","a"].findIndex(e => e === "b") > 1 デフォルト機能が無かったので、自分で関数を作って対応

関数で実装

function filterIndex(datas, value){ const res_arr = [] for(let i=0; i<datas.length; i++){ if(datas[i] === value){ res_arr.push(i) } } return res_arr }

実行サンプル

filterIndex(["a","b","a","b"],"b") > [1, 3]

ネイティブArray関数をハック

Array.prototype.filterIndex = function(value){ const datas = this const res_arr = [] for(let i=0; i<datas.length; i++){ if(datas[i] === value){ res_arr.push(i) } } return res_arr }

実行サンプル

["a","b","a","b"].filterIndex("b") > [1, 3]

あとがき

関数サンプルは、common.jsなどにまとめて書いておいてライブラリ的に使うと効率的です。 ネイティブ関数をハックする方法は、以後にネイティブのこの関数名で機能追加された場合は、コンフリクト(不具合の元)になる可能性が高いので、言語仕様に注目して本番化する必要がありますが、便利に使えます。 お好みの方法で、お使い下さい。