我正在尝试删除一个数组的对象,如果它的 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/