如何用lodash按对象和内部对象分组



我正在使用带Lodash的Typescript

在我从数据库中获得数据后,我得到了以下输出:

[
{
"unitPrice": 0.01,
"code": "92365524",
"description": "Broto gratis (chocolate)",
"menu": {
"code": "1DFD0",
"name": "Promoção"
}
},
{
"unitPrice": 0,
"code": "060d6fcf1c0d3663a1747dd249afa4db",
"description": "BROTO",
"menu": {
"code": "1CZSR",
"name": "Cardápio americano (broto)"
}
},
{
"unitPrice": 0,
"code": "ac91957034d03e818968b46663a61826",
"description": "BROTO",
"menu": {
"code": "1CZSR",
"name": "Cardápio americano (broto)"
}
}
]

我想按Menu对象进行分组,我尝试了很多,但还没有成功。我不知道如何进行这种排序。我正在使用lodas,但我需要使用另一个lib来完成吗?

这就是我需要的端点响应,它看起来很容易做到,但我无法理解:

{
"menu": [
{
"code": "1CZSR",
"name": "Cardápio americano (broto)",
"itens": [
{
"unitPrice": 0.01,
"code": "92365524",
"description": "Broto gratis (chocolate)"
}
]
},
{
"code": "1DFD0",
"name": "Promoção",
"itens": [
{
"unitPrice": 0,
"code": "060d6fcf1c0d3663a1747dd249afa4db",
"description": "BROTO",
},
{
"unitPrice": 0,
"code": "ac91957034d03e818968b46663a61826",
"description": "BROTO",
}
]
}
]
}

经过多次尝试,这是我所拥有的最接近我想要的去响应的代码。

const data = _.mapValues(_.groupBy(results, 'menu.code'), (menuItem) =>
menuItem.map((item) => _.omit(item, 'menu')),
);

但是输出是:

{
"1CZSR":[
{
"unitPrice": 0.01,
"code": "92365524",
"description": "Broto gratis (chocolate)"
}
],
"1DFD0": [
{
"unitPrice": 0,
"code": "060d6fcf1c0d3663a1747dd249afa4db",
"description": "BROTO",
},
{
"unitPrice": 0,
"code": "ac91957034d03e818968b46663a61826",
"description": "BROTO",
}
]
}

我忘了什么?

这是一个相当简单的组通过使用带有一些破坏的vanilla-js

const res = Object.values(
data.reduce((a, {menu: {code, name}, ...rest}) => {
a[code] = a[code] || {code, name, items: []};
return  a[code].items.push({...rest}), a;      
},{})
);
console.log(res)
.as-console-wrapper {max-height: 100%!important;top:0;}
<script>
const data=[{unitPrice:.01,code:"92365524",description:"Broto gratis (chocolate)",menu:{code:"1DFD0",name:"Promoção"}},{unitPrice:0,code:"060d6fcf1c0d3663a1747dd249afa4db",description:"BROTO",menu:{code:"1CZSR",name:"Cardápio americano (broto)"}},{unitPrice:0,code:"ac91957034d03e818968b46663a61826",description:"BROTO",menu:{code:"1CZSR",name:"Cardápio americano (broto)"}}];
</script>

最新更新