問題原因:
因為splice每次刪除都會改變原數組的長度,所以導致數組中的元素位置發生改變,從而導致只能刪除部分數據
解決方法:
- 倒序刪除
let arr = [ {id:1,name:'Tom',sex:0}, {id:2,name:'Jerry',sex:1}, {id:3,name:'Danny',sex:1}, {id:4,name:'Jenny',sex:0}, {id:6,name:'Lee',sex:0}, {id:5,name:'Bob',sex:1}, {id:7,name:'John',sex:0}, {id:8,name:'Marry',sex:1} ]; for(let i=arr.length-1;i>=0;i--){ if(arr[i].sex === 1){ arr.splice(i,1); }
2、 正序刪除,只有不是被刪除元素時才對索引做偏移i++ (注意:for循環的索引邊界應該為動態的,arr.length)
var arr = ["a","b","c","a",'a',"b"]; var ele = "a"; for(var i = 0; i < arr.length; ) { if(arr[i] == ele) { arr.splice(i, 1); } else { i++; //只有在沒有刪除元素時才對索引 i++ } }