【发布时间】:2020-11-19 11:39:34
【问题描述】:
我们是否可以通过对象的键对对象数组进行分组,其中键也是一个数组?
[
{
"name": "Apple",
"tags": ["fruits"]
},
{
"name": "Orange",
"tags": ["fruits"]
},
{
"name": "Tomato",
"tags": ["fruits", "vegetables"]
}
]
想要的结果在group by之后的一个对象:
{
"fruits": [
{
"name": "Apple",
"tags": ["fruits"]
},
{
"name": "Orange",
"tags": ["fruits"]
},
{
"name": "Tomato",
"tags": ["fruits", "vegetables"]
}
],
"vegetables": [
{
"name": "Tomato",
"tags": ["fruits", "vegetables"]
}
]
}
Vanilla 或 Lodash 解决方案非常受欢迎!
编辑
谢谢大家,这是我最终使用的:
const groupBy = key => array =>
array.reduce((obj, el) => {
el[key].forEach(k => {
obj[k] = obj[k] || []
obj[k].push({ ...el })
})
return obj
}, {})
const groupBySomething = groupBy(`something`)
const grouped = groupBySomething(data)
【问题讨论】:
-
你有没有尝试过?
-
@GabrielePetrioli 我尝试使用 Lodash 的 _.groupBy 无法正常工作。
标签: javascript arrays lodash