javascript - 通过比较具有不同元素的两个对象数组来过滤和删除项目

标签 javascript underscore.js

我有两个数组

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;
    });    
});

但它只给出不同元素的列表,但不支持从数组中删除元素。有没有办法使用下划线或传统方式来做到这一点?

最佳答案

您的 Pathpath 存在拼写错误。该代码适用于此更改。

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/

相关文章:

underscore.js - 在链中使用 zip

javascript - 下划线 : Wrap array with collection methods

javascript 错误导致页面重新加载?

javascript - 如何根据在 Highcharts 中选择的日期显示最大值和最小值?

javascript - 加载 dom 后禁用媒体查询

javascript - 从响应 header 访问 Set-Cookie

javascript - 如何在每个时间段执行一个功能?

javascript - Backbone 路由器不工作

Javascript 按周/月/年分组

javascript - 如何使下划线模板相互交互?