从对象数组中删除重复项 (Node.js)

问题描述 投票:0回答:3

没有

_.uniq
,因为它在我的平台上不起作用(autocode

我尝试使用

==
进行过滤,但没有成功。 我也尝试过
_.uniq
,也没有用。

代码:

      var tags = [...new Set(bot.tags)]

      for (var i = 0; i < bot.tags.length; i++) {
        tags1 += `\`${tags[i].label}\` `;
        
        tags2.push({
          label: `${tags[i].label}`,
          value: `${tags[i].name}`,
          default: false,
        });
      }
      
      console.log(tags2);

tags2
的当前值:

[
  { label: 'Anime', value: 'anime', default: false },
  { label: 'Social', value: 'social', default: false },
  { label: 'Moderation', value: 'moderation', default: false },
  { label: 'Fun', value: 'fun', default: false },
  { label: 'Anti-scam', value: 'anti-scam', default: false },
  { label: 'anti-scam', value: 'anti-scam', default: false },
  {
    label: 'Multiple Languages',
    value: 'multiple-languages',
    default: false
  },
  { label: 'Minecraft', value: 'minecraft', default: false },
  { label: 'Fun', value: 'fun', default: false },
  { label: 'Moderation', value: 'moderation', default: false },
  { label: 'Logging', value: 'logging', default: false },
  { label: 'anti-nuke', value: 'anti-nuke', default: false },
  { label: 'Utility', value: 'utility', default: false },
  { label: 'Multi-language', value: '-multi-language', default: false },
  { label: 'Anime', value: 'anime', default: false },
  { label: 'Logging', value: 'logging', default: false },
  { label: 'Together', value: 'together', default: false },
  { label: 'Utility', value: 'utility', default: false },
  { label: 'anti raid', value: 'anti-raid', default: false },
  {
    label: 'DiscordTogether',
    value: 'discordtogether',
    default: false
  },
  { label: 'Social', value: 'social', default: false }
]

似乎有一些值具有双

value
,尽管它们具有不同的
label
。我该如何解决这个问题?

(我需要不按整个对象的唯一性进行排序 - 仅按它的

value

javascript node.js arrays discord autocode
3个回答
1
投票

如果您使用的是 javaScript,您可以使用 Set

集合是唯一的项目的集合,即没有元素可以是 重复。 ES6 中的集合是有序的:集合中的元素可以迭代 在插入顺序中。 Set 可以存储任何类型的值,无论 原始或对象。


// Use to remove duplicate elements from the array 

const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]

//spreading numbers of the object into an array using the new operator
console.log([...new Set(numbers)]) 

// [2, 3, 4, 5, 6, 7, 32]


0
投票

我在自动编码上尝试过,它有效。

var unique = tags2.filter((set => f => !set.has(f.value) && set.add(f.value))(new Set));

console.log(unique);

0
投票
var unique = tags2.filter((set => f => !set.has(f.value) && set.add(f.value))(new Set));

console.log(unique);
  1. (set => f => !set.has(f.value) && set.add(f.value))
    是一个高阶函数,它采用
    Set
    (
    set
    ) 并返回过滤函数 (
    f => !set.has(f.value) && set.add(f.value)
    )。

  2. (new Set)
    创建一个新的
    Set
    并立即将其作为参数传递给高阶函数,从而创建一个内部包含
    Set
    的闭包。

  3. 返回的过滤函数将用作

    filter
    数组上
    tags2
    方法的回调函数。

  4. 过滤函数检查

    Set
    (
    set
    ) 是否没有当前元素的值 (
    !set.has(f.value)
    ),如果为真,则将该值添加到
    Set
    (
    set.add(f.value)
    )。这可确保只有唯一值保留在
    Set
    中。

  5. filter
    方法返回一个新数组(
    unique
    ),仅包含通过过滤条件的元素。

© www.soinside.com 2019 - 2024. All rights reserved.