javascript - 如果数组的 ID 与其他数组对象相同,如何删除该数组的对象

标签 javascript arrays object

我正在尝试删除一个数组的对象,如果它的 ID 与另一个数组中的对象的 ID 相同。但我不知道该怎么做。

例子:

parentArray1 = [ 
  { 
     id: 101
     ... 
  }, { 
     REMOVE THIS OBJECT BECAUSE ITS ID IS THE SAME AS parentArray2[0].id
     id: 102 
     ...
  }, { 
     id: 103 
     ...
  } 
];

parentArray2 = [ 
  { 
     id: 102 // SAME ID AS parentArray1[1].id
     ... 
  }  
];

有没有人有想法或解决方案?

最佳答案

过滤,保留一个元素,如果它不匹配第二个some元素:

parentArray1.filter(elt1 => !parentArray2.some(elt2 => elt2.id === elt1.id))

这里是逐行注释的格式:

parentArray1                       // From parentArray1
  .filter(                         // keep all the
    elt1 =>                        // elements for which 
      !                            // it is not the case that
      parentArray2                 // parentArray2
        .some(                     // has some
          elt2 =>                  // elements for which
            elt2.id                // the id
            ===                    // is equal to
            elt1.id))              // the id of the first element.

为您介绍一些 ES6 解构:

parentArray1.filter(({id1}) => !parentArray2.some(({id2}) => id1 === id2))

在 ES5 中,没有箭头函数:

parentArray.filter(function(elt1) {
  return !parentArray2.some(function(elt2) {
    return elt2.id === elt1.id;
  });
})

如果您想使用 for 循环执行此操作:

result = [];

for (var i = 0; i < parentArray1.length; i++) {
  var include = true;
  for (var j = 0; j < parentArray2.length; j++) {
    if (parentArray1[i].id === parentArray2[j].id) include = false;
  }
  if (include) result.push(parentArray1[i]);
}

您可能还需要考虑预先计算要删除的 ID 列表:

var removeIds = parentArray2.map(elt => elt.id);

现在您可以更轻松地过滤 parentArray1:

parentArray1.filter(elt => !removeIds.contains(elt.id))

关于javascript - 如果数组的 ID 与其他数组对象相同,如何删除该数组的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41506241/

相关文章:

javascript - Chrome 和 IE 返回不同的 SHA 哈希值

Ruby:打印和整理数组的方法

c++ - 在 C++ 的方法内部创建的对象实例的持久性

c++ - 将数据放在类声明中?

javascript - 如果第二个对象中不存在,则填充对象中的选择框

javascript - 如何在不使用系统时间的情况下获取当前时间...?

Javascript 验证还是 ASP 验证?

javascript - 使用正则表达式拆分在数组中创建 2 个空元素

javascript - AngularJS 等待提交表单(ng-submit)

c - c中的数组名到底是什么?