【问题标题】:If you want to remove an object from the first array which is not present in second array如果要从第一个数组中删除第二个数组中不存在的对象
【发布时间】:2018-10-23 03:48:44
【问题描述】:

如果您想从第一个数组“arrayOne”中删除多个对象,而第二个数组“arrayTwo”中不存在该对象。这只是我的建议。如果您有其他方法,请告诉我。

let arrayOne = [{
          id: 1
        }, {
          id: 2
        }, {
          id: 3
        }]
        let arrayTwo = [{
          id: 2
        },{
          id: 3
        }]

for (var index = arrayOne.length; index--;) {
if (!arrayTwo.find(y => y.id === arrayOne[index].id)) {
  arrayOne.splice(arrayOne.findIndex(z => z.id === arrayOne[index].id), 1)
  console.log("After splice", arrayOne)
}

【问题讨论】:

  • 可能想改用filter
  • 请说明你的问题,举个例子

标签: javascript for-loop foreach find


【解决方案1】:

您还可以使用Set 存储arrayTwo 元素的ID,然后使用filter 仅提取arrayOne 中同样存在于arrayTwo 中的那些元素:

let arrayOne = [{
  id: 1
}, {
  id: 2
}, {
  id: 3
}];

let arrayTwo = [{
  id: 2
}];

let arrayTwoSet = new Set(arrayTwo.map(e => e.id));
console.log(arrayOne.filter(e => arrayTwoSet.has(e.id)));

【讨论】:

    【解决方案2】:

    Array.filter() 中使用Array.some()

    let arrayOne = [{ id: 1 }, { id: 2 }, { id: 3 }] ;
    let arrayTwo = [{ id: 2 }];
    
    const result = arrayOne.filter(obj1 => !arrayTwo.some(obj2 => obj1.id === obj2.id));
    
    console.log('final array : ', result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 2020-08-16
      • 2023-02-26
      相关资源
      最近更新 更多