【发布时间】:2021-09-01 08:52:10
【问题描述】:
我有一个这样的数据集:
[
{
id: 'abc',
productType: "Nappies"
variants: ['3 Pack of Nappies', 'small']
},
{
id: 'abc',
productType: "Nappies"
variants: ['6 Pack of Nappies', 'small']
},
{
id: 'abc',
productType: "Nappies"
variants: ['12 Pack of Nappies', 'small']
},
{
id: 'abc',
productType: "Nappies"
variants: ['3 Pack of Nappies', 'medium']
},
{
id: 'abc',
productType: "Nappies"
variants: ['6 Pack of Nappies', 'medium']
},
{
id: 'abc',
productType: "Nappies"
variants: ['12 Pack of Nappies', 'medium']
},
{
id: 'def',
productType: "Wipes"
variants: ['3 Pack of Wipes']
},
{
id: 'def',
productType: "Wipes"
variants: ['6 Pack of Wipes']
},
{
id: 'def',
productType: "Wipes"
variants: ['12 Pack of Wipes']
},
]
如您所见,每个产品 ID 在所有变体中都重复出现。我需要减少数据,因此每个产品只有 1 个版本带有“X 包尿布”,例如:
想要的结果:
[
{
id: 'abc',
productType: "Nappies"
variants: ['3 Pack of Nappies', 'small']
},
{
id: 'abc',
productType: "Nappies"
variants: ['6 Pack of Nappies', 'small']
},
{
id: 'abc',
productType: "Nappies"
variants: ['12 Pack of Nappies', 'small']
},
{
id: 'def',
productType: "Wipes"
variants: ['3 Pack of Wipes']
},
{
id: 'def',
productType: "Wipes"
variants: ['6 Pack of Wipes']
},
{
id: 'def',
productType: "Wipes"
variants: ['12 Pack of Wipes']
},
]
每个中的次要变体(大小,例如“小”/“中”)并不重要。我尝试运行一个 reduce 函数,该函数运行一个过滤器,如果 reduce 对象的“variants”属性包含任何活动对象的“variant”属性但它返回所有内容,则返回 true。
const RemoveDuplicates = (array) => {
return array.reduce((arr, item) => {
const removed = arr.filter((obj) => {
return obj.selectedOptions.some((i) =>
item.selectedOptions.includes(i)
)
})
return [...removed, item]
}, [])
}
【问题讨论】:
-
从您的输出示例中不清楚您在问什么。你确定你的输出有代表性吗?
-
从您的预期输出看来,您只想按
variants过滤重复项,但我觉得您实际上想按variant分组并收集ids?
标签: javascript arrays ecmascript-6