javascript - 如何使用 lodash _groupBy
问题描述
这就是我的 json 的样子:
invoices = {
"count": 1 "data": Array(0)[{
"company": "ABC PLC",
"customer": {
"name": "XYZ"
},
"invoiceFees": Array(2)[
0: {
"quarter": {
"q_name": "A",
"description": "payments for quarter A"
}
},
1: {
"quarter": {
"q_name": "B",
"description": "payments for quarter B"
}
}
]
}]
}
我正在尝试按季度对发票结果进行分组。这就是我的做法:
console.log(_.groupBy(invoices.data.invoiceFees, 'quarter.q_name'));
这会将所有内容切成这样的空结果:
invoices = {}
我在这里做错了什么?
我想要的输出应该是这样的:
invoices = {
"data": [{
"company": "ABC PLC",
"customer": {
"name": "XYZ"
},
"invoiceFees": [{
"quarter A: {
"description": "payments for quarter A"
},
"quarter B: {
"description": "payments for quarter B"
}
}]
}]
}
解决方案
好的,对于您的具体示例,以下会产生您所追求的结果:
invoices = {
data: _.map(invoices.data, d => _.assign(
_.omit(d, 'invoiceFees'),
_.fromPairs(
_.map(d.invoiceFees, f => [
'quarter ' + f.quarter.q_name,
_.omit(f.quarter, 'q_name')
])
)
))
}
如果你需要invoiceFees
作为一个单独的对象,那么
invoices = {
data: _.map(invoices.data, d => _.assign(
d,
{invoiceFees: _.fromPairs(
_.map(d.invoiceFees, f => [
'quarter ' + f.quarter.q_name,
_.omit(f.quarter, 'q_name')
])
)}
))
}
推荐阅读
- angular - 如何将 aria-expanded 设置为 html 选择
- google-sheets - 谷歌表格将文本分成多列
- python - 为什么 Cx_Freeze 会加载这么多库
- r - 包括具有不同观测年数的数据框的趋势
- twitter-bootstrap - 带有所选项目的输入组以填充 Bootstrap 4.5.3 中的只读字段
- javascript - JavaScript:如何在对象数组中动态更改键位置?
- python - 登录页面问题(烧瓶,python)
- logstash - logstash-filter-useragent 插件将新 Edge 识别为 Chrome
- ios - 如何在 iOS 14 中更改 TabBar 位置
- docker - Nginx+Tomcat+Docker 组成 SSL