首页 > 解决方案 > 获取两个数组之间的差异

问题描述

我只需要得到两个数组之间的差异

我试过了:

let arr1 = {
    "data": [{
        "id": "EID_Floss",
        "name": "Floss",
        "te": "dd"
    }]
}
let arr2 = {
    "data": [{
        "id": "EID_Floss",
        "name": "Floss"
    }]
}
JSON.stringify(arr2.data.filter((x) => !arr1.data.includes(x)))

结果:

[{
    "id": "EID_Floss",
    "name": "Floss"
}]

如何只得到这个:

[{
   "te": "dd"
}]

标签: javascript

解决方案


看这个更简单的例子:


arr1 = ["foo", "bar"];
arr2 = ["foo", "bar", "foobar"];

arr3 = arr2.filter((x) => !arr1.includes(x));
console.log(arr3);

这正是您所期望的,输出是:

[“富吧”]

您的示例的问题在于数组 inarr1.dataarr2.data包含objects。您正在比较对象

{
        "id": "EID_Floss",
        "name": "Floss",
        "te": "dd"
}

arr1与对象

{
        "id": "EID_Floss",
        "name": "Floss"
}

arr2. 由于这些不相等,因此您的过滤器不会从数组中删除对象。

请注意,这是一个全有或全无的操作,因为您正在过滤对象数组。相反,听起来您想过滤每个对象中的。所以你需要使用Object.keys()Object.values()迭代对象的内容。


推荐阅读