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
    }
});

希望大家提出宝贵意见。

猜你喜欢

转载自www.cnblogs.com/Ingots/p/11333727.html