gpt4 book ai didi

javascript - 如何使用lodash返回两个数组对象之间存在差异的对象

转载 作者:行者123 更新时间:2023-12-02 21:22:22 25 4
gpt4 key购买 nike

例如

let array1 = [
{ 'id': 1010, 'name': 'grapes' },
{ 'id': 2020, 'name': 'blueberry' },
{ 'id': 3030, 'name': 'banana' }
]

let array2 = [
{ 'id': 1010, 'name': 'apple' },
{ 'id': 2020, 'name': 'blueberry' },
{ 'id': 4040, 'name': 'banana' },
{'id' : 5050, name 'jackfruit'}
]

输出应该是

let result = [
{ 'id': 1010, 'name': 'grapes' },
{ 'id': 3030, 'name': 'banana' },
{ 'id': 4040, 'name': 'banana' },
{ 'id' : 5050, name 'jackfruit'}
]

这里需要获取一个包含不常见对象数据的数组入口{ 'id': 2020, 'name': 'blueberry' } 被删除,因为 id 和 name 在两个数组中都很常见

最佳答案

这些示例使用原始问题中的数据集,但逻辑仍然代表更新后的问题。

根据你想要的结果,你可以得到数组之间的差异,如下所示:

const result = _.differenceWith(array1, array2, _.isEqual);

这将输出

{ id: 1010, name: "grapes" }

如果您想要对称差异,您也可以连接相反的差异:

const result = _.differenceWith(array1, array2, _.isEqual).concat(_.differenceWith(array2, array1, _.isEqual));

这会给你

{ id: 1010, name: "grapes" }
{ id: 1010, name: "apple" }
{ id: 3030, name: "banana" }

您在问题中引用的结果略有不同,它既不是差异也不是对称差异,如果您只想每个 ID 得到一个结果,则需要删除任何具有已存在 ID key 的对象的第二次出现像这样存在:

result = result.filter((elm, i) => !result.find((elm2, j) => elm.id === elm2.id && i > j) );

这会给你

{ id: 1010, name: "grapes" }
{ id: 3030, name: "banana" }

关于javascript - 如何使用lodash返回两个数组对象之间存在差异的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60812738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com