【问题标题】:Remove duplicate objects in array, based on only one value in the objects删除数组中的重复对象,仅基于对象中的一个值
【发布时间】:2020-12-07 06:29:26
【问题描述】:

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

我找到了一些可以解决问题的代码,但这并不是我所需要的。

现在假设我有这个数组:

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

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

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

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

有什么想法吗?

【问题讨论】:

标签: javascript arrays reactjs


【解决方案1】:

您可以使用 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"
  }
]

【讨论】:

    【解决方案2】:

    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)

    【讨论】:

      猜你喜欢
      • 2020-04-15
      • 2021-08-26
      • 2018-11-14
      • 2015-06-19
      • 1970-01-01
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      相关资源
      最近更新 更多