首页 > Web开发 > 详细

js一次删除多个不同的指定元素

时间:2019-08-11 10:53:27      阅读:100      评论:0      收藏:0      [点我收藏+]

在一次笔试题中遇到的问题,如从一个数组[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
    }
});

希望大家提出宝贵意见。

js一次删除多个不同的指定元素

原文:https://www.cnblogs.com/Ingots/p/11333727.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!