El .indexOf()
método tiene un segundo parámetro opcional que especifica el índice desde el que comenzar la búsqueda, por lo que puede llamarlo en un bucle para encontrar todas las instancias de un valor particular:
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");
Realmente no deja en claro cómo desea usar los índices, por lo que mi función los devuelve como una matriz (o devuelve una matriz vacía si no se encuentra el valor), pero podría hacer algo más con los valores de índice individuales dentro del bucle.
ACTUALIZACIÓN: según el comentario de VisioN, un bucle for simple haría el mismo trabajo de manera más eficiente, y es más fácil de entender y, por lo tanto, más fácil de mantener:
function getAllIndexes(arr, val) {
var indexes = [], i;
for(i = 0; i < arr.length; i++)
if (arr[i] === val)
indexes.push(i);
return indexes;
}
for
bucle con relleno de matriz de índice.