Присвойте значения массива объектному JavaScript верхнего уровня - PullRequest
0 голосов
/ 12 ноября 2018

Внизу - уменьшенная версия файла JSON, который я пытаюсь проанализировать.Я хотел бы создать отдельные объекты, в которых есть ключ для имени команды и имени игрока.

Как бы я использовал имя команды и сопоставление каждого отдельного игрока и получил бы что-то подобное (используя javascript):

[
{ name: 'Dallas Stars', playerName: 'Alexander Radulov'},
{ name: 'Dallas Stars', playerName: 'Ben Bishop'},
{ name: 'Dallas Stars', playerName: 'Jamie Benn'}
...
{ name: 'Columbus Blue Jackets', playerName: 'Pierre-Luc Dubois'}
]

Из этого JSON:

[ { name: 'Dallas Stars',
        roster:
         [ 'Alexander Radulov',
           'Ben Bishop',
           'Jamie Benn',
           'Tyler Pitlick',
           'Miro Heiskanen' ] },
      { name: 'Los Angeles Kings',
        roster:
         [ 'Jonathan Quick',
           'Jonny Brodzinski',
           'Oscar Fantenberg' ] },
      { name: 'San Jose Sharks',
        roster:
         [ 'Joe Thornton',
           'Brent Burns',
           'Joe Pavelski',
           'Antti Suomela' ] },
      { name: 'Columbus Blue Jackets',
        roster:
         [ 'Sonny Milano',
           'Brandon Dubinsky',
           'Nick Foligno',
           'Pierre-Luc Dubois' ] } ]

По сути, я пытаюсь сопоставить пару ключей верхнего уровня отдельным игрокам.Я также попытался выполнить поиск по всем функциям lodash и не нашел правильный способ сделать это.

Есть ли способ использовать плоскую карту и несколько раз использовать имя команды?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Вы также можете использовать map и flat.

Отобразить карту над исходным массивом, затем для каждого элемента «сопоставить» карту над его списком и создать нужный объект. Наконец, поскольку результирующий массив будет 2d, сгладьте его:

var data = [{ name: 'Dallas Stars', roster: ['Alexander Radulov', 'Ben Bishop', 'Jamie Benn', 'Tyler Pitlick', 'Miro Heiskanen' ] }, { name: 'Los Angeles Kings', roster: ['Jonathan Quick', 'Jonny Brodzinski', 'Oscar Fantenberg' ] }, { name: 'San Jose Sharks', roster: ['Joe Thornton', 'Brent Burns', 'Joe Pavelski', 'Antti Suomela' ] }, { name: 'Columbus Blue Jackets', roster: ['Sonny Milano', 'Brandon Dubinsky', 'Nick Foligno', 'Pierre-Luc Dubois' ] } ];

var res = data
  .map(({name, roster}) =>
    roster.map(playerName => ({name, playerName})))
  .flat();

console.log(res);
0 голосов
/ 12 ноября 2018

Вам нужно перебрать элементы внешнего массива, а затем внутри каждого из них перебрать также roster.reduce обычно является наиболее подходящим методом для преобразования массива в другой массив не на основе одного:

const input=[{name:'Dallas Stars',roster:['Alexander Radulov','Ben Bishop','Jamie Benn','Tyler Pitlick','Miro Heiskanen']},{name:'Los Angeles Kings',roster:['Jonathan Quick','Jonny Brodzinski','Oscar Fantenberg']},{name:'San Jose Sharks',roster:['Joe Thornton','Brent Burns','Joe Pavelski','Antti Suomela']},{name:'Columbus Blue Jackets',roster:['Sonny Milano','Brandon Dubinsky','Nick Foligno','Pierre-Luc Dubois']}];

const output = input.reduce((a, { name, roster }) => {
  roster.forEach((playerName) => {
    a.push({ name, playerName });
  });
  return a;
}, []);
console.log(output);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...