我有这个数组[[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
}
]
]
最佳答案
通过使用 aaray 对象并且此对象具有相同的键顺序,您可以将每个对象作为单个 JSON字符串并对JSON数组进行排序并将此字符串连接到单个字符串并将此字符串作为检查唯一性的值 Set
.
const
normalize = v => v.map(o => JSON.stringify(o)).sort().join('|'),
filterWithSet = s => v => (n => !s.has(n) && s.add(n))(normalize(v)),
data = [[{ 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 }]],
unique = data.filter(filterWithSet(new Set));
console.log(unique);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 如何从数组中删除子数组中具有相同元素的所有组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59330549/