先說我遇到的問題,講解一下緣由。循環刪除元素的時候座標是對不上的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++;
})
}
複製代碼