用for循环或者forEach遍历数组的话,在方法体内部splice都得不到正确的结果。有什么好的办法解决这个问题吗?
var arr=[2,3,5,7];
arr.forEach(function(item,idx){
if(item===5){
arr.splice(idx,1);
}
})
用for循环或者forEach遍历数组的话,在方法体内部splice都得不到正确的结果。有什么好的办法解决这个问题吗?
var arr=[2,3,5,7];
arr.forEach(function(item,idx){
if(item===5){
arr.splice(idx,1);
}
})
你的方法没问题啊,可以删除5
如果你是想删除数组里面的所有指定的元素,比如值为5的所有元素,那么可以这样写:注意不要缓存length,它是动态的,这里也不能用forEach,因为forEach方法它一开始执行就自动缓存数组的长度,删除数组元素会出现意外;
var arr = [1,2,5,4,5,6,7,8,5];
for(var i = 0;i<arr.length;i++){
if(arr[i]===5){
arr.splice(i,1);
i--;
}
}
console.log(arr); //[1,2,4,6,7,8]
underscore
without
_.without(array, *values)
Returns a copy of the array with all instances of the values removed.
_.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
=> [2, 3, 4]
我可不可以这么理解,把不需要删除的放在另一个数组,返回就是删除后的数组
var newarr ...
数组循环:{
如果不需要删除,newarr.push(obj)
}
return newarr
如果允许生成一个新的数组
var arr=[2,3,5,7,5];
var bb=arr.filter(function(x){
if(x!=5){return true}
else{return false}
})
console.log(bb)
实现为 倒序删除 推荐使用 while
(function () {
var arr = [1,2,2,3,4,5];
var i = arr.length;
while(i--){
console.log(i+"="+arr[i]);
if(arr[i]==2){
arr.splice(i,1);
}
}
console.log(arr);
})();
使用 while 的原因 javascript循环性能比较
建议:不要在循环中 使用 splice doApplyEdits Lines inserted using splice
如果是已知要被删除的下标 ,可以用
for (const i of deleteIndex.reverse()) {
paths.splice(i, 1);
}
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
今天回来看这个回答,虽然没错,但是有点偏题。就拿问题中的用例来说,有两个方法
方法一,用
filter
方法二,用逆向循环
forEach
不是什么时候都适用的,如果不改变原数组,用map
比较合适,如果要直接改变原数组,用for
比较合适。之前的回答
删除单个是不会有问题的,问题只可能出在删除多个的情况下,因为删除了前面的后面的按原序号就对应不上了
如果要删除多个,可以用这个办法——按序号从后往前删
比如要删除
[1, 2, 3, 5, 9, 8, 10, 7]
中的偶数,可以