删除阵列中重复的对象,仅基于对象中的一个值



我正在编写一些返回数组中唯一对象的代码。

我找到了一些代码,但它并不是我所需要的。

现在我们假设我有这个数组:

restuls= [
{
name: "name 1",
description: "",
group: "group 1"
},
{
name: "name 1",
description: "",
group: "group 1"
},
{
name: "name 1",
description: "",
group: "group 2"
},
]

通过下面的代码,我在这个数组中找到了所有唯一的对象,这意味着,如果对象中的任何值不同,它将是唯一的。因此,在这种情况下,它将返回2个对象(因为在第三个对象上-->group:"group 2"(。

var array = results,
unique = Array.from(
new Set(array.map(o => JSON.stringify(o))),
s => JSON.parse(s)
);

我真正想要的是,它删除了所有重复的对象,但只查看";name";因此,在这种情况下,所有3个对象都有相同的名称,因此应该只显示一个。

有什么想法吗?

您可以使用forSet-

const input =
[{name: "name 1",description: "",group: "group 1"},{name: "name 1",description: "",group: "group 1"},{name: "name 1",description: "",group: "group 2"},]
const result =
[]

const seen =
new Set


for (const v of input)
if (seen.has(v.name))
continue
else
(result.push(v), seen.add(v.name))

console.log(result)

输出-

[
{
"name": "name 1",
"description": "",
"group": "group 1"
}
]

或使用Map-

const input =
[{name: "name 1",description: "",group: "group 1"},{name: "name 1",description: "",group: "group 1"},{name: "name 1",description: "",group: "group 2"},]

const seen =
new Map

for (const v of input)
if (seen.has(v.name))
continue
else
seen.set(v.name, v)
const result =
Array.from(seen.values())

console.log(result)

输出-

[
{
"name": "name 1",
"description": "",
"group": "group 1"
}
]

results= [
{
name: "name 1",
description: "",
group: "group 1"
},
{
name: "name 1",
description: "",
group: "group 1"
},
{
name: "name 1",
description: "",
group: "group 2"
},
]
const map = new Map();
results.forEach(x => {
if(!map.has(x.name))
{ map.set(x.name, x) }
});
const arr = Array.from(map).map(x => x[1]);
console.log(arr)

最新更新