js一次刪除多個不同的指定元素


在一次筆試題中遇到的問題,如從一個數組[5,1,6,8,2,4,5,10]中,刪除另一個數組[5,6,2,10]中的出現的元素,且只刪除從左到右第1次相同的元素,刪除后的結果為[1, 8, 4, 5],從而引出下列問題。

一次刪除多個相同的元素

使用 filter

var arr = [1,1,1,2,2,2,3,3];
//刪除是2的元素
arr = arr.filter(item => item !== 2);

使用逆向循環,用for循環或者forEach遍歷數組的話,在方法體內部splice都得不到正確的結果,解決方法是使用逆向循環

var arr = [1,2,3,1,2,3];
for (let i = arr.length - 1; i >= 0; i--) {
    if (arr[i] === 2) {
        arr.splice(i, 1);
    }
}

使用正則

    var arr = [1, 1, 1, 2, 2, 2, 3, 3];
    var a = 2;
    // 使用模板字符串可傳入變量
    var reg = new RegExp(`${a}`, "g");
    arr = arr.join("").replace(reg, "").split("").map(i => Number(i))

一次刪除多個不同的元素

使用 filter

var arr = [1,1,1,2,2,2,3,3];
//刪除是2,3的元素
arr = arr.filter(item => [2,3].indexOf(item) == -1);

使用逆向循環

var arr = [1,2,3,1,2,3];
for (let i = arr.length - 1; i >= 0; i--) {
// 刪除是2,3的元素 if ([2,3].indexOf(arr[i]) !== -1) { arr.splice(i, 1); } }

使用正則

    var arr = [1, 1, 1, 2, 2, 2, 3, 3];
  // 刪除是2,3的元素
    var a = 23;
    // 使用模板字符串可傳入變量
    var reg = new RegExp(`[${a}]`, "g");
    arr = arr.join("").replace(reg, "").split("").map(i => Number(i));

回歸正題

目前只想到使用filter的方法,逆向循環和正則的辦法沒想到,歡迎大家來補充。

var arr = [1,1,1,2,2,2,3,3];
//刪除第一個是2,3的元素
var arr2 = [2, 3];
arr = arr.filter(item => {
    if (arr2.indexOf(item) !== -1) {
      arr2.shift();
      return false
    } else {
      return true
    }
});

希望大家提出寶貴意見。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM