javascript - 如何从数组中删除子数组中具有相同元素的所有组合?
问题描述
我有这个数组
[[1,2,3],[4,1,6],[1,3,2],[1,2,4],[3,1,2],[4,6,1],[9,9,9]]
我想要一个这样做的功能:
[[1,2,3],[4,1,6],[1,2,4],[9,9,9]]
.
此函数删除所有具有相同值的子数组。
我想过这样的过滤器
.filter(el => el.filter(value => array2.includes(value)))
但我不认为它会起作用。
PS:我使用 node.js
编辑:奇怪的是,你的许多答案都适用于这个例子,但在我真正的程序中不起作用......事实上,我使用的是对象而不是数字。像这样:[[obj,obj,obj],[obj,obj,obj],[obj,obj,obj]]
。但我不知道为什么它适用于数字而不是对象......
EDIT2:我现在给出最小的例子,这个对象:
请注意,实际数组可以有 20,000 个项目
[
[
{ name: 'Dofawa', item_type: 'Dofus', level: 6 },
{
name: 'Dofus Cawotte',
item_type: 'Dofus',
level: 6
},
{
name: 'Dofus Kaliptus',
item_type: 'Dofus',
level: 6
}
],
[
{ name: 'Dofawa', item_type: 'Dofus', level: 6 },
{
name: 'Dofus Emeraude',
item_type: 'Dofus',
level: 6
},
{
name: 'Dofus Ocre',
item_type: 'Dofus',
level: 6
}
],
[
{ name: 'Dofawa', item_type: 'Dofus', level: 6 },
{
name: 'Dofus Kaliptus',
item_type: 'Dofus',
level: 6
},
{
name: 'Dofus Cawotte',
item_type: 'Dofus',
level: 6
}
],
[
{
name: 'Dofus Cawotte',
item_type: 'Dofus',
level: 6
},
{
name: 'Dofus Kaliptus',
item_type: 'Dofus',
level: 6
},
{ name: 'Dofawa', item_type: 'Dofus', level: 6 }
]
]
应该给这个对象:
[
[
{ name: 'Dofawa', item_type: 'Dofus', level: 6 },
{
name: 'Dofus Cawotte',
item_type: 'Dofus',
level: 6
},
{
name: 'Dofus Kaliptus',
item_type: 'Dofus',
level: 6
}
],
[
{ name: 'Dofawa', item_type: 'Dofus', level: 6 },
{
name: 'Dofus Emeraude',
item_type: 'Dofus',
level: 6
},
{
name: 'Dofus Ocre',
item_type: 'Dofus',
level: 6
}
]
]
解决方案
从技术上讲,它可以通过创建一个哈希表来解决,在该哈希表中,您只将唯一数组{}
作为键添加到一个空对象中。可以通过首先对子数组进行排序并添加为对象的键来创建唯一值。最后,您可以Object.values()
从对象中获取值。
基于这个想法,我想这对你有用:
const array = [[1,2,3],[4,1,6],[1,3,2],[1,2,4],[3,1,2],[4,6,1],[9,9,9]];
const result = {};
array.forEach(a => {
const t = Array.from(a).sort((a,b) => a - b);
if (!result[t]) result[t] = a;
});
console.log(Object.values(result));
从Object.values()
文档:
Object.values() 方法返回给定对象自己的可枚举属性值的数组,其顺序与 for...in 循环提供的顺序相同(不同之处在于 for-in 循环枚举原型链中的属性以及)。
我希望这有帮助!
推荐阅读
- javascript - TypeScript 中是否有任何已定义的 HashTable 类,如 C#
- r - stats4::mle 的正确使用
- django - 哪些查询集可以帮助我根据两个选择字段生成结果?
- ionic3 - 无法在函数中设置未定义离子的属性
- angular - 类的公共方法在 TypeScript/Angular 中不可见
- azure-devops - 如何在 VSTS / Azure Devops 仪表板中显示 PowerApp?
- c++ - 类型扣除时间
- node.js - NodeJS 流不等待异步
- mime-types - .tex 文件的正确 mimetype 是什么?
- sonarqube - 如何在每次运行中实现一个新的 bar 以实现 sonarqube 代码覆盖率?