带有对象的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不同,应该保留哪一个)?