我正在编写一些返回数组中唯一对象的代码。
我找到了一些代码,但它并不是我所需要的。
现在我们假设我有这个数组:
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个对象都有相同的名称,因此应该只显示一个。
有什么想法吗?
您可以使用for
和Set
-
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)