Как использовать lodash _groupBy - PullRequest
       11

Как использовать lodash _groupBy

1 голос
/ 18 октября 2019

Вот так выглядит мой 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"
  }
}]
}]
}

1 Ответ

2 голосов
/ 18 октября 2019

Хорошо, для вашего конкретного примера, следующий результат вы получите:

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