查找数组中值的索引

时间:2013-07-25 01:41:11

标签: javascript arrays for-loop indexof

我一直在浏览网站,我发现的只是找到数组中值的索引的问题,但该值是数组中该值的唯一出现。我想知道是否有办法在每次发生时找到重复值的索引。

说出这样的数组就像这样:

var arr = [45,56,76,4,53,43,6,273,884,69,47,58,225,222,23,13,89,900,7,66,78,74,69];

是否可以遍历此并找到值69的索引?

6 个答案:

答案 0 :(得分:3)

以下是在现代浏览器中执行此操作的方法:

function findIndexes(arr, val){
  return arr.map(function(v,i){ return v==val && i }).filter(Number);
}

console.log(findIndexes(arr, 69)); //=> [9,22]

答案 1 :(得分:2)

当然有可能。电脑很棒。

var positions = [];
for (var i = 0; i < arr.length; ++i)
  if (arr[i] === 69)
    positions.push(i);

在该循环结束时,数组“位置”将包含找到69的数组的所有索引。

你可以概括一下:

function indexes(arr, value) {
  var rv = [];
  for (var i = 0; i < arr.length; ++i)
    if (arr[i] === value)
      rv.push(i);
  return rv;
}

然后:

var i69 = indexes(arr, 69);

答案 2 :(得分:2)

因为我们都发布了各种方法来执行简单的任务......

var arr = [45,56,76,4,53,43,6,273,884,69,47,58,225,222,23,13,89,900,7,66,78,74,69];

arr.reduce(function(res, n, i) {
    return n === 69 ? res.concat(i) : res;
}, []);

答案 3 :(得分:1)

循环while下一个indexOf不是-1 ..

function allIndicesOf(arr, val) {
    var found = [], i = -1;
    while (-1 !== (i = arr.indexOf(val, i + 1))) found.push(i);
    return found;
}

var arr = [0, 1, 2, 3, 2, 1, 8, 5, 2, 0, 4, 3, 3, 1];

allIndicesOf(arr, 3); // [3, 11, 12]

答案 4 :(得分:0)

我的想法

function indexs(arr,val){
    var start = arr.indexOf(val),result = [];
    while(start >= 0){
        result.push(start);
        start = arr.indexOf(val,start+1);
    }
    return result;
}

玩得开心:)

答案 5 :(得分:0)


var arr = [45,56,76,4,53,43,6,273,884,69,47,58,225,222,23,13,89,900,7,66,78,74,69],
    i = arr.length,
    o = {};

while( i-- ) {
    if( !o[ arr[i] ] ) {  
        `o[ arr[i] ] = [];`
    }
    o[ arr[i] ].push( i );
}

alert( o[69] );