【发布时间】:2023-03-15 09:16:01
【问题描述】:
我有一个包含对象数组的数组,我需要比较它。
我已经查看了多个类似的线程,但我找不到一个合适的比较 多个 对象数组(大多数是比较两个对象数组或只是比较对象在单个数组中)
这是数据(下面是带有代码示例的 JSFiddle)
const data = [
[
{
"id": "65",
"name": "Some object name",
"value": 90
},
{
"id": "89",
"name": "Second Item",
"value": 20
}
],
[
{
"id": "89",
"name": "Second Item",
"value": 20
},
{
"id": "65",
"name": "Some object name",
"value": 90
}
],
[
{
"id": "14",
"name": "Third one",
"value": 10
}
]
]
我想删除所有重复的对象数组,无论data 的长度如何(可能还有更多记录)。
我设法将唯一的提取到一个对象中:
const unique = data.reduce(function(result, obj) {
return Object.assign(result, obj)
}, [])
但这对我不起作用,因为我需要保留 1 个重复的数组,并且返回的数据也是一个数组,而不是一个对象。例如:
// result I need
[
[
{
"id":"65",
"name":"Some object name",
"value":90
},
{
"id":"89",
"name":"Second Item",
"value":20
}
],
[
{
"id":"14",
"name":"Third one",
"value":10
}
]
]
那么,如何将每个对象数组与父数组中的其他对象进行比较,并保留每个重复或唯一的对象数组之一?
【问题讨论】:
-
搜索对象副本的概念保持不变,无论是在一个数组还是多个数组中搜索。
-
事实上看起来更复杂,否则我现在可能已经完成了基于 simply 过滤单个数组中重复对象的数百个答案.您链接的问题也是如此,它不能满足这个用例。
-
我不确定这是不是链接的副本,因为内部数组似乎是有序的,因此需要先对它们进行排序,然后才能进行比较。我已经使用一些 lodash 函数组合了一个解决方案 -
uniqWith和sortBy: jsbin.com/terelef/2/edit?js,console
标签: javascript arrays reactjs