用for循环或者forEach遍历数组的话,在方法体内部splice都得不到正确的结果。有什么好的办法解决这个问题吗?
var arr=[2,3,5,7];
arr.forEach(function(item,idx){
if(item===5){
arr.splice(idx,1);
}
})
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
今天回来看这个回答,虽然没错,但是有点偏题。就拿问题中的用例来说,有两个方法
方法一,用
filter方法二,用逆向循环
forEach不是什么时候都适用的,如果不改变原数组,用map比较合适,如果要直接改变原数组,用for比较合适。之前的回答
删除单个是不会有问题的,问题只可能出在删除多个的情况下,因为删除了前面的后面的按原序号就对应不上了
如果要删除多个,可以用这个办法——按序号从后往前删
比如要删除
[1, 2, 3, 5, 9, 8, 10, 7]中的偶数,可以我可不可以这么理解,把不需要删除的放在另一个数组,返回就是删除后的数组
var newarr ...
数组循环:{
如果不需要删除,newarr.push(obj)
}
return newarr
要么从后往前删
要么创建一个新的数组,然后扫描当前数组,把有效数据
push到新的里面去。你的方法没问题啊,可以删除5
如果你是想删除数组里面的所有指定的元素,比如值为5的所有元素,那么可以这样写:注意不要缓存length,它是动态的,这里也不能用forEach,因为forEach方法它一开始执行就自动缓存数组的长度,删除数组元素会出现意外;
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 arr=[2,3,5,7,5];
写一个方法,删除数组里所有的某个元素