首页 > 技术文章 > js 一次性删除数组中的多个元素

jiaqi1719 2021-12-04 21:31 原文

         
错误使用方式  根据数组中某些元素是否选中删除
// arr.forEach((item, index) => {
//     if(item.checked) {
//         arr.splice(index, 1);
//     }
// });
               正确使用方式举例:
                // filter 使用方式
                arr = arr.filter((item) => !item.checked);
  
// 逆向循环 处理嵌套较深的方式 for (let i = arr.length - 1; i >= 0; i--) { for (let j = arr[i].arr2.length - 1; j >= 0; j--) { if (arr[i].arr2[j].checked) { arr[i].arr2.splice(j, 1); // 如果当前item 中的 arr2 删除完,当条item也一起删除 if(!arr[i].arr2.length) { arr.splice(i, 1); } } } }

用正向for循环或者forEach遍历数组的话,在方法体内部splice都得不到正确的结果,解决方法是使用逆向循环,从后往前循环,正向循环会索引改变,结果不正确。
方法一,用 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); } }

参考网友:https://www.cnblogs.com/ouchen0312/p/7798096.html

 

 

 

推荐阅读