O .indexOf()
método tem um segundo parâmetro opcional que especifica o índice a partir do qual iniciar a pesquisa, para que você possa chamá-lo em um loop para encontrar todas as instâncias de um determinado valor:
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");
Você realmente não deixa claro como deseja usar os índices, então minha função os retorna como uma matriz (ou retorna uma matriz vazia se o valor não for encontrado), mas você poderia fazer outra coisa com os valores de índice individuais dentro do loop.
ATUALIZAÇÃO: de acordo com o comentário do VisioN, um loop for simples faria o mesmo trabalho com mais eficiência e é mais fácil de entender e, portanto, mais fácil de manter:
function getAllIndexes(arr, val) {
var indexes = [], i;
for(i = 0; i < arr.length; i++)
if (arr[i] === val)
indexes.push(i);
return indexes;
}
for
loop com preenchimento de matriz de índice.