【问题标题】:How to use the lodash _groupBy如何使用 lodash _groupBy
【发布时间】:2019-10-18 07:25:21
【问题描述】:

这就是我的 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"
  }
}]
}]
}

【问题讨论】:

  • 你能显示你想要的输出吗?
  • 我猜第二个参数应该是'quarter.q_name'
  • json 看起来无效。
  • @NickParsons 我已经添加了所需的输出,但对任何可以帮助我对 invoiceFees 进行分组的输出都开放
  • @ntalbs 当然,我刚刚尝试想出一个虚拟 json 数据

标签: javascript arrays json sorting lodash


【解决方案1】:

好的,对于您的具体示例,以下会产生您所追求的结果:

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')
            ])
        )}
    ))
}

【讨论】:

  • 是的,它确实对季度进行了分组,但它应该在 invoiceFees[ ] 中保留季度
  • @Emmon:请不要以使现有答案无效的方式编辑您的问题。这会产生您在上一个版本中要求的输出。
  • 对不起@georg,我输入了错误的预期结果。我会小心不要在未来造成这样的。但是,是的,您的回答确实产生了我之前在修订前所问的结果。有没有办法可以操纵它来包含修改后的结果?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 2021-07-16
  • 2019-03-22
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多