javascript - js 如何一次性删除数组中的多个元素?
PHPz
PHPz 2017-04-11 12:53:56
[JavaScript讨论组]

用for循环或者forEach遍历数组的话,在方法体内部splice都得不到正确的结果。有什么好的办法解决这个问题吗?

var arr=[2,3,5,7];
arr.forEach(function(item,idx){
  if(item===5){
      arr.splice(idx,1);
  }
})
PHPz
PHPz

学习是最好的投资!

全部回复(7)
ringa_lee

今天回来看这个回答,虽然没错,但是有点偏题。就拿问题中的用例来说,有两个方法

方法一,用 filter

var arr = [2, 3, 5, 7];
arr = arr.filter(item => item !== 5);

方法二,用逆向循环

var arr = [2, 3, 5, 7];
for (let i = arr.length - 1; i >= 0; i--) {
    if (arr[i] === 5) {
        arr.splice(i, 1);
    }
}

forEach 不是什么时候都适用的,如果不改变原数组,用 map 比较合适,如果要直接改变原数组,用 for 比较合适。


之前的回答

删除单个是不会有问题的,问题只可能出在删除多个的情况下,因为删除了前面的后面的按原序号就对应不上了

如果要删除多个,可以用这个办法——按序号从后往前删

比如要删除 [1, 2, 3, 5, 9, 8, 10, 7] 中的偶数,可以

var arr = [1, 2, 3, 5, 9, 8, 10, 7];
var indexes = arr
    // 如果是偶数返回序号,否则返回 -1
    .map((n, i) => n % 2 === 0 ? i : -1)
    // 找出不是 -1 的,即所有偶数的序号
    .filter(i => i >= 0);

console.log(indexes);
// [ 1, 5, 6 ]

// 按从大到小排序(之前的结果就是从小到大的,所以这里不需要排序,直接逆)
indexes = indexes.reverse();

for (var i = 0; i < indexes.length; i++) {
    arr.splice(indexes[i], 1);
}

console.log(arr);
// [ 1, 3, 5, 9, 7 ]
高洛峰

我可不可以这么理解,把不需要删除的放在另一个数组,返回就是删除后的数组

var newarr ...
数组循环:{
如果不需要删除,newarr.push(obj)
}
return newarr

天蓬老师
  1. 要么从后往前删

  2. 要么创建一个新的数组,然后扫描当前数组,把有效数据push到新的里面去。

PHPz

你的方法没问题啊,可以删除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 arr=[2,3,5,7,5];

    var bb=arr.filter(function(x){
        if(x!=5){return true}
        else{return false}
    })
    console.log(bb)
阿神

写一个方法,删除数组里所有的某个元素

 var removeElement = function(arr, elm) {
        for(var i=0; i< arr.length; i++) {
            if(arr[i]==elm) {
                arr.splice(i,1);
                i--;
            }
        }
        return arr
};

var arr=[2,3,5,7,5,9,5];

console.log(removeElement(arr, 5)); // [2, 3, 7, 9]
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号