错误使用方式 根据数组中某些元素是否选中删除 // 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