首页 > 解决方案 > 根据特定数据删除数组中的重复元素 [Discord.js]

问题描述

我这里有一个我无法处理的问题。互联网上很少有关于此的文章。好吧,刚开始的时候,我需要做一个函数,从表中删除重复数据,但是这个数据的比较必须基于表对象中的数据,下面我举个例子,因为我不知道如果我解释得很好。

[
  { 
     id: 1234, 
     user: { 
       nickname: 'a' <-
     }
  },
  { 
     id: 1234, 
     user: { 
       nickname: 'b' <-
     }
  },
  { 
     id: 1234, 
     user: { 
       nickname: 'a' <-
     }
  },
]

数据将根据 进行比较user.nickname

我试着这样做

array.filter((value, index) => array.indexOf (value.user.nickname) === index)

但我得到的只是一个空白数组

[]

如果有人可以提供帮助,我将不胜感激,因为我有这种情况。

标签: javascriptdiscord.js

解决方案


在您尝试时使用Array.filter,应该是一个适当的 aproat:

const users = [
  {
    id: 1234,
    user: {
      nickname: "a",
    },
  },
  {
    id: 1234,
    user: {
      nickname: "b",
    },
  },
  {
    id: 1234,
    user: {
      nickname: "a",
    },
  },
];

let filteruniquebyUserName = users.filter(
  (user, index, users) => users.findIndex((compareUser) => compareUser.user.nickname === user.user.nickname) === index
);
console.log(filteruniquebyUserName);

请参阅:如何从对象数组中删除所有重复项?

另一种更扩展但更容易理解的方式:

const data = [
  {
    id: 1234,
    user: {
      nickname: "a",
    },
  },
  {
    id: 1234,
    user: {
      nickname: "b",
    },
  },
  {
    id: 1234,
    user: {
      nickname: "b",
    },
  },
  {
    id: 1234,
    user: {
      nickname: "a",
    },
  },
];

let elementRepeated = [];

let filteruniquebyUserName = data.filter((user, index, data) => {
  if(elementRepeated.includes(user.user.nickname)) return;

  const numberOfRepeatUser = data.filter(element => element.user.nickname === user.user.nickname).length;
  if(numberOfRepeatUser > 1) elementRepeated.push(user.user.nickname);
  return user
});
console.log(filteruniquebyUserName);


推荐阅读