如何使用 lodash 对具有内部对象的对象进行分组?
How to group by objects with inside objects with lodash?
我正在使用 Typescript 和 Lodash!
从数据库中获取数据后,我得到以下输出:
[
{
"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,但我需要使用另一个库来执行此操作吗?
这就是我需要的端点响应,它看起来很容易做到,但我无法弄清楚:
{
"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>
我正在使用 Typescript 和 Lodash!
从数据库中获取数据后,我得到以下输出:
[
{
"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,但我需要使用另一个库来执行此操作吗?
这就是我需要的端点响应,它看起来很容易做到,但我无法弄清楚:
{
"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>