1. 程式人生 > >splice()方法刪除陣列中不連續的幾項

splice()方法刪除陣列中不連續的幾項

1、正常情況下,用splice方法刪除陣列的某一項,完全可以

例如:

        var arr=['內馬爾','C羅','梅西','伊布','范佩西'];
for(let i=0;i<arr.length;i++){
//只刪除一項時:梅西
if(arr[i] == '梅西'){
arr.splice(i,1);
}
}
console.log(arr);

2、那麼問題來了:如果現在要刪除‘內馬爾’+‘梅西’+‘伊布’呢?

如果繼續使用splice方法,多加一個判斷而已

var arr=['內馬爾','C羅','梅西','伊布','范佩西'];
for(let i=0;i<arr.length;i++){
//刪除不連續多項時:內馬爾+伊布+梅西
if(arr[i] == '內馬爾' || arr[i] == '梅西' || arr[i] == '伊布'){
arr.splice(i,1);
}
}
console.log(arr);

Duang!刪錯了

3、問題分析,改進方法

因為上面每一個if判斷中執行splice()後,原陣列變化,原陣列的中每一項的下標是會改變的哦

所以再用splice()方法就會出錯!直接每次執行splice()後,i--就可以了

var arr=['內馬爾','C羅','梅西','伊布','范佩西'];
for(let i=0;i<arr.length;i++){
//刪除不連續多項時:內馬爾+伊布+梅西
if(arr[i] == '內馬爾' || arr[i] == '梅西' || arr[i] == '伊布'){
arr.splice(i,1);
i--;
}
}
console.log(arr);

4

、或者使用lodash的方法

過濾陣列

_.difference([1,2,3,4],[2,4])//返回[1,3]