在根据条件删除数组中的数组的时候,发现splice没有处理对应的数组,循环只执行一次。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>测试splice</title>
</head>
<body>
<script>
let arr = [{
id: 1,
name: '迪丽热巴',
sex: 0
}, {
id: 2,
name: '江疏影 ',
sex: 0
}, {
id: 3,
name: '胡歌',
sex: 1
}, {
id: 4,
name: '彭于晏',
sex: 1
}, {
id: 6,
name: '周星驰',
sex: 1
}, {
id: 5,
name: '刘德华',
sex: 1
}, {
id: 7,
name: '渣渣辉',
sex: 1
}, {
id: 8,
name: '张艺兴',
sex: 1
}];
for (let i = 0; i < arr.length - 1; i++) {
if (arr[i].sex === 1) {
arr.splice(i, 1);
}
}
console.log(arr);
</script>
</body>
</html>
效果:
从打印的结果就可以看出,splice只删除了一部分。那怎么办呢?其实原因很简单,由于splice的操作它是会改变元素组的长度的, 因此有些数据本该删掉的数据却保留了下来。
正确的方式:
方法一:
for (let i = arr.length - 1; i >= 0; i--) {
if (arr[i].sex === 1) {
arr.splice(i, 1);
}
}
方法二:
for (let i = 0; i < arr.length; i++) {
if (arr[i].sex === 1) {
arr.splice(i, 1);
i--;
}
}
结果: