Форматирование данных с помощью lodash

предположим, у меня есть следующий массив json:

const input = [
  { "tx_type": "215", "dos": "2019-05-02", "payer": "Cigna", "count": 23 },
  { "tx_type": "215", "dos": "2019-05-02", "payer": "SENIORCARE Plus", "count": 75 },
  { "tx_type": "217", "dos": "2019-05-02", "payer": "Aetna", "count": 2 },
  { "tx_type": "215", "dos": "2019-05-03", "payer": "Aetna", "count": 85 },
  { "tx_type": "215", "dos": "2019-05-03", "payer": "TRICARE", "count": 1 },
  { "tx_type": "215", "dos": "2019-05-03", "payer": "Aetna", "count": 5 },
  { "tx_type": "215", "dos": "2019-05-03", "payer": "Cigna", "count": 11 }
]

который выходит из базы данных postgres 9.2, но я пытаюсь поместить данные в визуализацию данных, которая ожидает, что данные будут выглядеть так:

[
  {
    "tx_type": "x215",
    "dos": [
      { "date": "2019-05-02", "SENIORCARE Plus": 75, "Cigna": 23 },
      { "date": "2019-05-03", "Aetna": 96, "TRICARE": 1, "Cigna": 11 }
    ],
  },
  {
    "tx_type": "x215",
    "dos": [
      { "date": "2019-05-02", "Aetna": 2 }
    ]
  }
]

я пытался использовать lodash для группировки объектов по tx_type с помощью .groupBy("tx_type"), а также _.chain(input).nest("tx_type").groupBy("dos").value(), а также фильтрации по tx_type, а затем пытался сгруппировать/вложить...

на самом деле, все, что я пытаюсь сделать, это отфильтровать по tx_type и сгруппировать плательщиков и количество по дате.

любой вклад будет принят с благодарностью. и как бы я ни хотел перейти на более новую версию postgres, на самом деле это не вариант.

примечание: я думаю, вы хотели сказать x217 на 2-м объекте в ожидаемых результатах.

Steven Stark 05.04.2019 01:50

Вы уверены, что хотите использовать значения payer в качестве ключей в результатах? Кажется менее дружелюбным, чем стандартные имена свойств

charlietfl 05.04.2019 02:06

@charlietfl Я следую учебнику по d3js, и это формат, который он использует ... В противном случае я бы согласился с вами

StillLearningToCode 05.04.2019 02:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
303
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сгруппируйте по tx_type и сопоставьте группы. Чтобы создать свойство dos, сопоставьте элементы в группе, сгруппируйте их по dos, сопоставьте результаты, чтобы преобразовать каждую строку в объект { data, [payer]:count }, и объедините объекты:

const input = [{"tx_type":"215","dos":"2019-05-02","payer":"Cigna","count":23},{"tx_type":"215","dos":"2019-05-02","payer":"SENIORCARE Plus","count":75},{"tx_type":"217","dos":"2019-05-02","payer":"Aetna","count":2},{"tx_type":"215","dos":"2019-05-03","payer":"Aetna","count":85},{"tx_type":"215","dos":"2019-05-03","payer":"TRICARE","count":1},{"tx_type":"215","dos":"2019-05-03","payer":"Aetna","count":5},{"tx_type":"215","dos":"2019-05-03","payer":"Cigna","count":11}]

const result = _(input)
  .groupBy('tx_type')
  .map((dos, tx_type) => ({
    tx_type,
    dos: _(dos)
      .groupBy('dos')
      .map((g, date) => _.merge({}, 
        ..._.map(g, ({ payer, count }) => ({ date,  [payer]: count }))
      ))
      .value()
  }))
  .value()
  
console.info(result)
<script src = "https://cdnjs.cloudflare.com/ajax/libs/lodash-compat/3.10.2/lodash.js"></script>

Другие вопросы по теме