Свести массив с родительскими значениями - PullRequest
0 голосов
/ 17 мая 2018

Дано

[
 {"id":1,"country":"US","area":1,"values":[{"city":"Chicago"},{"city":"New York"}]}, 
 {"id":2,"country":"Canada","area":2,"values":[{"city":"Toronto"},{"city":"Quebec"}]}
]

Я пытаюсь свести данные в формат таблицы с каждым объектом в массиве значений в виде строки таблицы с дублированными родительскими полями.

Результат

[
  {"country":"US","city":"Chicago"},
  {"country":"US","city":"New York"},
  {"country":"Canada","city":"Toronto"},
  {"country":"Canada","city":"Quebec"}
]

Я хотел бы упомянуть, какие поля следует оставить в родительских полях. Для бывшего единственного поля, то есть поля страны в нашем примере. Другие примеры могут включать несколько или все родительские поля.

Существует ли элегантный способ достижения ожидаемых результатов? Прямо сейчас я использую вложенные циклы для достижения того же.

1 Ответ

0 голосов
/ 17 мая 2018

В итоге это два вложенных цикла, но вы можете воспользоваться map и reduce для упрощения кода. Смотрите ниже:

const input = [
 {"id":1,"country":"US","area":1,"values":[{"city":"Chicago"},{"city":"New York"}]}, 
 {"id":2,"country":"Canada","area":2,"values":[{"city":"Toronto"},{"city":"Quebec"}]}
];

const result = input.reduce((output, {country, values}) =>
  output.concat(values.map(({city}) => ({ country, city }))), []);
  
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...