我一直在浏览网站,我发现的所有问题都是关于查找数组中值的索引的问题,但该值是该数组中值的唯一出现次数。我想知道是否有一种方法可以在每次出现重复值时找到索引。查找数组中值的索引
说有和数组,像这样:
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的指标?
我一直在浏览网站,我发现的所有问题都是关于查找数组中值的索引的问题,但该值是该数组中值的唯一出现次数。我想知道是否有一种方法可以在每次出现重复值时找到索引。查找数组中值的索引
说有和数组,像这样:
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的指标?
当然这是可能的。电脑很棒。
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);
第一行+1! –
这里有一个办法做到这一点在现代浏览器:
function findIndexes(arr, val){
return arr.map(function(v,i){ return v==val && i }).filter(Number);
}
console.log(findIndexes(arr, 69)); //=> [9,22]
或者'.filter()'而不是'.map()'? ...哎呀,不,这不行。 –
@疯狂火车:你会怎么做?您需要以某种方式映射索引,'filter'期望您返回'true/thy'或'false/y'。我错过了什么吗? – elclanrs
只有我的评论的更新。我没有考虑指数。 –
循环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]
啊,我刚刚发布了几乎相同的例子。即使是在'while'头部的任务。 +1 –
@CrazyTrain当我一行'while'循环并且它按照期望工作时,我总觉得我已经取得了一些特殊的东西。 –
既然我们都张贴各种方式来完成简单的任务...
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;
}, []);
+1创造力。我玩的是类似的智慧,但最终发布了“map | filter”解决方案。 – elclanrs
我唯一不喜欢的就是常量'.concat()'。让我感到肮脏。虽然看起来确实比“if”陈述更好。 –
你可以使用_reduce_,_charCodeAt_和_Array_在[这个问题]中做一些简洁的事情(http://stackoverflow.com/questions/17845584/converting-a-random-string-into-a-hex-colour ),这不会像我在那里的答案那样疯狂。 –
我的想法
function indexs(arr,val){
var start = arr.indexOf(val),result = [];
while(start >= 0){
result.push(start);
start = arr.indexOf(val,start+1);
}
return result;
}
玩得开心:)
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]);
要格式化您的代码,只需选择整个代码块,然后单击编辑区域上方的**按钮。{} –
循环会首先您将学习基本的编程教程。 –