如何查找数组中所有元素出现的索引?
2022-08-30 02:33:58
我试图在JavaScript数组中找到一个元素的所有实例的索引,比如“Nano”。
var Cars = ["Nano", "Volvo", "BMW", "Nano", "VW", "Nano"];
我尝试了jQuery.inArray,或者类似的.indexOf(),但它只给出了元素最后一个实例的索引,即在这种情况下为5。
如何获取所有实例的它?
我试图在JavaScript数组中找到一个元素的所有实例的索引,比如“Nano”。
var Cars = ["Nano", "Volvo", "BMW", "Nano", "VW", "Nano"];
我尝试了jQuery.inArray,或者类似的.indexOf(),但它只给出了元素最后一个实例的索引,即在这种情况下为5。
如何获取所有实例的它?
.indexOf()
方法具有可选的第二个参数,该参数指定要从中开始搜索的索引,因此您可以在循环中调用它以查找特定值的所有实例:
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;
}
另一种替代解决方案是使用Array.prototype.reduce()
:
["Nano","Volvo","BMW","Nano","VW","Nano"].reduce(function(a, e, i) {
if (e === 'Nano')
a.push(i);
return a;
}, []); // [0, 3, 5]