javascript - 根据特定数据删除数组中的重复元素 [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)
但我得到的只是一个空白数组
[]
如果有人可以提供帮助,我将不胜感激,因为我有这种情况。
解决方案
在您尝试时使用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);
推荐阅读
- sql - 如何通过子分组获取列数据
- java - 获取 JSP 的内容并在 Java 中通过电子邮件发送
- node.js - 使用关系/关联查询时未执行 Sequelize afterFind 挂钩
- c - 是否通过指向 const 未定义行为的指针来修改对象?
- java - 两个 LocalDateTime 变量没有正确比较?
- sapui5 - 没有云平台的 SAPUI5 目的地替代方案
- apache-flink - Flink:迭代循环中处理事件的顺序是什么?
- python - .pb 文件的推理结果与 .h5 不匹配
- azure - “CloudException:...提供的存储帐户的读取或写入权限不足。” 在 Azure 中启用 DBServer 审核日志时
- cakephp - CakePHP 3 提交后从控制器中清除选定的输入值