1

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

像这样说有和数组:

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 的索引?

4

6 回答 6

3

这是在现代浏览器中执行此操作的一种方法:

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

console.log(findIndexes(arr, 69)); //=> [9,22]
于 2013-07-25T01:47:27.260 回答
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;
}, []);
于 2013-07-25T02:02:55.177 回答
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);
于 2013-07-25T01:42:47.910 回答
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]
于 2013-07-25T01:57:24.440 回答
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;
}

玩得开心 :)

于 2013-07-25T02:23:42.263 回答
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] );
于 2013-07-25T02:31:31.657 回答