先说我遇到的问题,讲解一下缘由。循环删除元素的时候坐标是对不上的javascript
let arr = ["Banana", "Orange", "Apple", "Orange"]
arr.splice(2,2); // 这样没有问题的
复制代码
可是好比指定删除全部的 Orange 字段就须要循环删了,当咱们删除第一个 Orange arr 的长度发生了变化已经找不到坐标是 3 的 Orange,因此 最后一个是删除不掉的,java
按照逻辑上讲上述是没有问题的,可是我在查找缘由的时候 arr 的长度发生变化以后循环就中止了。这个你们也能够试一下能够给我留言大家测试的结果。数组
/** * 判断一个值,是不是对象指定属性的值 * @ value 要对比的值 * @array 查找的数组对象 * @attr 要在 object 中和哪一个属性的值作比较 */
export const deleteObject = (value, array, attr) => {
let key = [];
let i = 0;
// 这一行能够忽略,是我作的容错处理
checkfiled (value, array);
array.forEach((item, index) => {
if (!item[attr]) {
throw 'attr 不存在 object 中'
}
if (item[attr] === value) {
// 按照逻辑 我想在这里执行 array.splice(index - i, 1); i++;
// 可是 array 的 长度发生变化以后 退出循环了。只好记住坐标
key.push(index)
}
})
// 在这里单独 删除就能够了
key.forEach((j) => {
array.splice(j-i, 1);
i++;
})
}
复制代码