配列内の要素のすべての出現のインデックスを見つけるにはどうすればいいですか? 質問する

配列内の要素のすべての出現のインデックスを見つけるにはどうすればいいですか? 質問する

JavaScript 配列内の要素 (たとえば「Nano」) のすべてのインスタンスのインデックスを見つけようとしています。

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

私は試したjQuery.inArray、または同様に、。の指標()ただし、要素の最後のインスタンスのインデックスのみが提供され、この場合は 5 になります。

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

ベストアンサー1

.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");

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

更新: 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;
}

おすすめ記事