先说我遇到的问题,讲解一下原因。循环删除元素的时候坐标是对不上的
let arr = ["Banana", "Orange", "Apple", "Orange"] arr.splice(2,2); // 这样没有问题的复制代码
但是比如指定删除所有的 Orange 字段就需要循环删了,当我们删除第一个 Orange arr 的长度发生了变化已经找不到坐标是 3 的 Orange,所以 最后一个是删除不掉的,
按照逻辑上讲上述是没有问题的,但是我在查找原因的时候 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++;})}复制代码