javascript - 比较数组对象并显示差异

标签 javascript ecmascript-6 ecmascript-5

我有两个数组,我想比较并检查其中一个数组中是否有已删除的项目。如果有请告诉我差异(已删除的项目)

下面是我希望如何实现此目的的代码:

 var completedList = [{id:1},{id:2},{id:3},{id:4},{id:7},{id:8}];
    var invalidList = [{id:3},{id:4},{id:5},{id:6}];

    // filter the items from the invalid list, out of the complete list
    var validList = completedList.map((item) => {
        console.log(item.id)
        return item.id;
        //console.log(invalidList.id);
    }).filter(item => {
        Object.keys(invalidList).map(key => {
            console.log(invalidList[key].id)
            //return !invalidList[key].id.includes(item.id);
        });
    })

    console.log(validList); // Print [1,2,7,8]

    // get a Set of the distinct, valid items
    var validItems = new Set(validList);

但是这会返回很多 id 我如何在对象属性 id 上映射数组和过滤器?并且只显示这些数组对象之间的区别。

所以基本上我期望的是看到这些数组之间的差异,因此记录 id 的差异,因此在此示例中:1,2,5,6,7,8

最佳答案

您可以选择 Set为了获得差异。为了获得彼此之间的差异(对称差异),您需要获得两个差异。

const
    difference = (a, b) => Array.from(b.reduce((s, v) => (s.delete(v), s), new Set(a))),
    getId = ({ id }) => id;

var completedList = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 7 }, { id: 8 }],
    invalidList = [{ id: 3 }, { id: 4 }, { id: 5 }, { id: 6 }],
    complete = completedList.map(getId),
    invalid = invalidList.map(getId),
    left = difference(complete, invalid),
    right = difference(invalid, complete),
    result = [...left, ...right]

console.log(result.join(' '));
console.log(left.join(' '));
console.log(right.join(' '));

关于javascript - 比较数组对象并显示差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52535839/

相关文章:

javascript - 每 x 秒自动刷新 div 并停止成功加载

javascript - 如何在 React 组件中获取特定的子组件?

javascript - Relayjs 和 graphql 错误 : Error: "Node" expects field "id"

javascript - 使用 toString 获取函数名称有什么风险?

JavaScript 在迭代数组时等待后端响应

javascript - 如何添加动态包装任何函数调用的 JS 代码?

javascript - 检查按钮值jquery

java - 如何使用JSP动态编辑表?

JavaScript - 不正确的自动舍入小数

javascript - 删除 ...} 后括号缩进?