我在数组中使用一组数值,其中重复某些值。我想找到重复值出现的 ALL 指数。
例如,我使用indexOf()
包含以下代码:
var dataset = [2,2,4,2,6,4,7,8];
return dataset.indexOf(2);
但这只会给出第一次出现2
的索引。 (即它返回值0
。)
但是,我希望返回所有2
次出现的索引(即0,1,3
)。我怎样才能做到这一点? (我知道我可以使用for
循环,但我想知道是否有一种更好的方法可以在不迭代整个数组的情况下执行此操作。基本上,我正在尝试节省显式迭代的开销。整个阵列。)
答案 0 :(得分:3)
@Bagavatu:如果你不想要for循环,你可以尝试这个fiddle -
var dataset = [2,2,4,2,6,4,7,8];
var results = [];
var ind
// the while loop stops when there are no more found
while( ( ind = dataset.indexOf( 2 ) ) != -1 ){
results.push( ind + results.length )
dataset.splice( ind, 1 )
}
return results;
注意:使用for循环会更快。见评论。
var dataset = [2,2,4,2,6,4,7,8];
var results = [];
for ( i=0; i < dataset.length; i++ ){
if ( dataset[i] == 2 ){
results.push( i );
}
}
return results;
答案 1 :(得分:2)
您可以使用filter()
对象的Array
方法来处理:
var dataset = [2, 2, 4, 2, 6, 4, 7, 8];
var indexs = [];
dataset.filter(function(elem, index, array){
if(elem == 2) {
indexs.push(index);
}
});
alert(indexs);
和here is some more documentation on the filter() method,以及旧版浏览器的后备。
答案 2 :(得分:1)
这里有一个例子:Try if yourself
var dataset = [2,2,4,2,6,4,7,8];
// We get the first indexOf number 2
var prev = dataset.indexOf(2);
// While we find indexes we keep searching
while (prev != -1) {
alert(prev);
// we get the indexOf number 2 starting in the previous position + 1
prev = dataset.indexOf(2, prev + 1);
}
答案 3 :(得分:1)
看起来这个功能可能无法开箱即用,但通过创建Array.prototype.allIndexOf
功能,可以使用“插件”here。
它仍然遍历整个列表(这是必需的),但它略微抽象了逻辑。