1. ホーム
  2. javascript

[解決済み] 配列に出現するすべての要素のインデックスを求めるには?

2022-05-08 13:16:24

質問

JavaScriptの配列で、ある要素、例えば「Nano」のすべてのインスタンスのインデックスを見つけようとしています。

var Cars = ["Nano", "Volvo", "BMW", "Nano", "VW", "Nano"];

を試してみました。 jQuery.inArray などがあります。 .indexOf() しかし、それはその要素の最後のインスタンスのインデックス、すなわちこの場合は5を与えるだけでした。

すべてのインスタンスで取得するにはどうすればよいですか?

解決するには?

その .indexOf() メソッド は、検索を開始するインデックスを指定するオプションの第2パラメータを持つので、ループ内でこれを呼び出して、特定の値のすべてのインスタンスを見つけることができます。

function getAllIndexes(arr, val) {
    var indexes = [], i = -1;
    while ((i = arr.indexOf(val, i+1)) != -1){
        indexes.push(i);
    }
    return indexes;
}

var indexes = getAllIndexes(Cars, "Nano");

インデックスをどのように使用したいのかが明確になっていないので、私の関数はインデックスを配列として返します(値が見つからない場合は空の配列を返します)が、ループ内で個々のインデックス値を使って別のことをすることも可能です。

UPDATE: VisioNさんのコメントにあるように、単純なforループの方が同じ仕事を効率的にこなせますし、理解しやすいのでメンテナンスもしやすいと思います。

function getAllIndexes(arr, val) {
    var indexes = [], i;
    for(i = 0; i < arr.length; i++)
        if (arr[i] === val)
            indexes.push(i);
    return indexes;
}