我一直在浏览网站,我发现的只是找到数组中值的索引的问题,但该值是数组中该值的唯一出现。我想知道是否有办法在每次发生时找到重复值的索引。
说出这样的数组就像这样:
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的索引?
答案 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] );