返回给定元素的所有数组索引
Return all the array indexes of a given element
我写了下面的函数,对于给定的数组和值将返回数组中值的索引数组。我观察到它只对某些元素有效?
var arr = [1,2,3,1,2,3,3,4,3]
var findAll = function(arr, val) {
var results = [];
var length = arr.length;
var pos = 0;
while(pos < length) {
pos = arr.indexOf(val, pos);
if (pos == -1) return [];
results.push(pos);
pos = pos + 1;
}
return results;
}
//Output:
findAll(arr,3)
[2, 5, 6, 8]
findAll(arr,1)
[] // expected [0,3]
findAll(arr,2)
[] // expected [1,4]
findAll(arr,4)
[] // expected [7]
问题你继续搜索,直到数组结束。如果你没有找到,返回[].
所以如果你搜索的值不是数组的最后一个元素你会得到[]
你应该把if改成:
if (pos != -1) results.push(pos);
让我们快速重写一下这个函数。这就是你所需要的:
var findAll = function(arr, val) {
var results = [];
for(var i = 0; i < arr.length; i++){ // Loop through the array.
if(arr[i] === val){ // If the desired value is found
results.push(i); // Push it's index to `results`
}
}
return results;
}
这可能不是最有效的,因为无论如何它都会迭代整个数组,但它工作起来很有魅力。
问题出在这一行:
if (pos == -1) return [];
你应该用:
if (pos == -1) break;
或:
if (pos == -1) return results;
方法如下。简单。并且不遍历整个数组。
function check(ar, val){
var pos = 0;
var tmp = [];
pos = ar.indexOf(val, pos);
while (pos >= 0){
tmp.push(pos);
pos = ar.indexOf(val, pos + 1);
}
return tmp;
(http://jsfiddle.net/daqdm/1)
相关文章:
- 按最大值获取数组索引
- 删除和重用数组索引
- 警报数组索引和值
- .fadeIn .fadeOut 会导致数组索引出现奇怪的行为
- Javascript原型通用Enquries和通过数组索引分配Id
- 获取数组索引的值
- Javascript-将值与关联数组索引进行比较
- Javascript-在数组索引中循环的问题
- JavaScript - “规范化”数组索引
- 数组索引混淆
- 使用 Javascript/React.js 查找对象的数组索引
- 如何拆分数组索引
- 获取新推送元素的数组索引
- 在 javascript 中将数组索引作为参数传递
- 当对象本身存储在 JavaScript 的数组索引中时,如何打印对象的每个单独属性
- 如何使用数组索引序列
- ASP.NET/JavaScript:数组索引溢出:实体框架/LINQ
- 如何在分配给数组索引的对象上调用方法
- 使用铆钉访问数组索引.js
- 计算 Javascript 数组索引的出现次数