js中数组删除指定元素

1,076 阅读1分钟

1.ForEach()

       潜在的问题可能会导致乱序

      let arr = [1,1,2];      arr.forEach((item, index, arr) => {        if (item == 1) {          arr.splice(index, 1);        }      });      console.log(arr); // [1, 2]

因为第一次判断index=0,item= 1会将第一个元素删除;

此时数组变成[1,2] 第二次index=1 ,将会从item=2 开始查,导致漏掉了原数组中的第二个1;

2.解决方法

  • filter()

     应用到数组上

    let arr = [1, 1, 2]
    arr = arr.filter(item => {
      return item != 1
    })
    console.log(arr) // [2]

     应用到对象上

let arr = [
      {
        productId: 1,
        productName: '电视机',
        num: 20
      }, {
        productId: 2,
        productName: '洗衣机',
        num: 0
      }, {
        productId: 3,
        productName: '冰箱',
        num: 50
      }, {
        productId: 4,
        productName: '空调',
        num: 0
      },
    ]
    arr = arr.filter(item => {
      return item.num != 0
    })
    console.log(arr)
  • for与for-in(不推荐)

    4 for (var i = 0; i < arr.length; i++) { 5   if (...) { 6     arr.splice(i, 1); // 将使后面的元素依次前移,数组长度减1 7     i--; // 如果不减,将漏掉一个元素 8   } 9 }