如何获取Array中所有相同值的索引?

时间:2013-06-26 05:42:43

标签: javascript arrays indexof

我在数组中使用一组数值,其中重复某些值。我想找到重复值出现的 ALL 指数。

例如,我使用indexOf()包含以下代码:

var dataset = [2,2,4,2,6,4,7,8];
return dataset.indexOf(2);

但这只会给出第一次出现2的索引。 (即它返回值0。)

但是,我希望返回所有2次出现的索引(即0,1,3)。我怎样才能做到这一点? (我知道我可以使用for循环,但我想知道是否有一种更好的方法可以在不迭代整个数组的情况下执行此操作。基本上,我正在尝试节省显式迭代的开销。整个阵列。)

4 个答案:

答案 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

它仍然遍历整个列表(这是必需的),但它略微抽象了逻辑。