我有两个数组
arr1 = [{path: "path1"}, {path: "path2"}];
arr2 = [{path: "path1"}];
首先,我想通过比较两个数组来找到从 arr1 中删除的元素(在本例中为 path1 对象),并操作第一个数组或通过删除该项目来覆盖它。在这种情况下,预期的数组是
expArray = [{path: "path2"}]
我尝试过使用array.filter
方法。
var filteredElements = arr1 .filter(function(obj) {
return !arr2 .some(function(obj2) {
return obj.Path === obj2.Path;
});
});
但它只给出不同元素的列表,但不支持从数组中删除元素。有没有办法使用下划线或传统方式来做到这一点?
最佳答案
您的 Path
与 path
存在拼写错误。该代码适用于此更改。
var arr1 = [{ path: "path1" }, { path: "path2" }],
arr2 = [{ path: "path1" }],
filteredElements = arr1.filter(function(obj) {
return !arr2.some(function(obj2) {
return obj.path === obj2.path;
// ^ ^
});
});
console.log(filteredElements);
如果你想改变arr1
,你可以拼接不需要的元素,因为这会改变长度,所以你可以从末尾迭代。
var arr1 = [{ path: "path1" }, { path: "path2" }],
arr2 = [{ path: "path1" }],
i = arr1.length;
while (i--) {
if (arr2.some(({ path }) => arr1[i].path === path)) {
arr1.splice(i, 1);
}
}
console.log(arr1);
关于javascript - 通过比较具有不同元素的两个对象数组来过滤和删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56812137/