获取数组中所有元素出现的索引(索引)

时间:2014-03-10 21:20:27

标签: javascript arrays

我有一个数组。例如,[1,2,3,4,1,2,3,4]。如何在不改变阵列的情况下获得第一个“3”和第二个“3”的位置?我意识到这是一个类似的问题: Javascript - Get position of the element of the array,但我想找到两个“3”的位置。有谁知道如何做到这一点? (没有jQuery)

5 个答案:

答案 0 :(得分:4)

这是一个通用函数,它返回所有在数组中指定的元素出现的位置:

代码:

Array.prototype.indicesOf = function(query) {
    var indices = [];
    var x = this.indexOf(query);
    while(x != -1) {
        indices.push(x);
        x = this.indexOf(query, x + 1);
    }
    return indices;
};

用法:

var myArray = [1, 2, 3, 4, 1, 2, 3, 4];
var positions = myArray.indicesOf(3); // `positions` is now [2, 6]

另一个例子:

var thingsTheySaid = ["Hello", "Hi", "Greetings", "Howdy",
                      "Good morning", "Hello"];

console.log(thingsTheySaid.indicesOf("Hello")); // Logs [0, 5]

答案 1 :(得分:2)

假设你有arr = [1, 2, 3, 4, 1, 2, 3, 4],你可以使用它:

a = arr.indexOf(3);
b = arr.indexOf(3,a+1);

答案 2 :(得分:2)

如果您 JUST 有两个要知道其位置的元素,可以使用

indexOf()lastIndexOf()

答案 3 :(得分:0)

<script>
 var a = [1,2,3,4,1,2,3,4];
 var pos = [];
 for(var i=0;i<a.length;i ++){
   if(a[i] === 3){
    pos.push(i);
   }else{

   }
}
alert(pos[0]);
alert(pos[1]);
</script>

你可以循环遍历数组 无论何时将所有索引推送到另一个数组 它等于你要搜索的数字。

答案 4 :(得分:0)

或者,您可以:

var matchingIndexes = [];
var x = [1, 2, 3, 4, 1, 2, 3, 4];
x.forEach(function (element, index) { 
    if (element === 3) { 
        matchingIndexes.push(index); 
    }
});

关于输出:

console.log(matchingIndexes)

[2,6]

您当然可以将其作为函数包装或使用已经提到过的array.prototype。