带有对象的javascript集
合并字符串数组时,我可以使用带有对象的javascript集,javascript,ecmascript-6,Javascript,Ecmascript 6,合并字符串数组时,我可以使用Set和ES6删除重复项,如下所示: const a = ["hello", "hi", "yo"] const b = ["alo", "hi"] const remove_hi = [ ...new Set([ ...a, ...b, ]), ] 但是如何比较和删除对象呢? 假设我有这个: const a = [ {id: "
Set
和ES6删除重复项,如下所示:
const a = ["hello", "hi", "yo"]
const b = ["alo", "hi"]
const remove_hi = [
...new Set([
...a,
...b,
]),
]
但是如何比较和删除对象呢?
假设我有这个:
const a = [
{id: "asd", name: "Hi"},
{id: "fgh", name: "Hello"},
{id: "123", name: "Hi"}
]
const b = [
{id: "jkl", name: "Yo"},
{id: "123", name: "Hi"}
]
// This will not work. It will have a duplicate of {id: "123", name: "Hi"}
const remove_hi = [
...new Set([
...a,
...b,
]),
]
如何从带有集合的组合数组中删除{id:“123”,name:“Hi”}
?使用键name
进行重复数据消除:
const uniqueBy=(数组,键)=>[
…新地图(
map(o=>[key(o),o])
).values()
];
常数a=[
{id:“asd”,姓名:“Hi”},
{id:“fgh”,name:“Hello”},
{id:“123”,姓名:“Hi”}
]
常数b=[
{id:“jkl”,name:“Yo”},
{id:“123”,姓名:“Hi”}
]
const remove_hi=uniqueBy([…a,…b],o=>o.name);
控制台日志(删除\u hi)代码>我会首先对对象进行字符串化,并将其存储在集合中,如果对象键的位置不会改变,则可能会有更好、更优雅的方法。其他方法将需要迭代集合中的每个项,并检查每个对象的属性和值。可能,但非常麻烦。如果我在这种情况下,我会退后一步,考虑是否有不同的方法来解决问题,除了将对象放入一个SEDO中,您想通过<代码> ID>代码>,还是通过<代码> ID <代码>和<代码>名称>代码>的组合?您想保留第一个引用还是最后一个引用(假设第一个对象的id与第二个同名对象的id不同,应该保留哪一个)?