@s24344

Как правильно сформировать следующий массив (native javascript)?

Здравствуйте. Подскажите, пожалуйста, как правильно решить следующую задачу. У меня есть некая структура данных.
const data = [
  {
    locations: [
      {
        locationId: 0,
        players: [
          {
            holes: [
              {
                holeId: 101,
                score: 5
              },
              {
                holeId: 102,
                score: 5
              },
              {
                holeId: 103,
                score: 5
              },
              {
                holeId: 104,
                score: 5
              }
            ],
            firstName: "firstName 1",
            lastName: "lastName 1"
          },
          {
            holes: [
              {
                holeId: 101,
                score: 5
              },
              {
                holeId: 102,
                score: 5
              }
            ],
            firstName: "firstName 2",
            lastName: "lastName 2"
          },
          {
            holes: [
              {
                holeId: 101,
                score: 5
              }
            ],
            firstName: "firstName 3",
            lastName: "lastName 3"
          }
        ]
      }
    ]
  }
]

const players = data[0].locations[0].players;

players.forEach((item) => {
  console.log(item.holes);
  // [{...}, {...}, {...}, {...}]
  // 0: {holeId: 101, score: 5]
  // 1: {holeId: 102, score: 5]
  // 2: {holeId: 103, score: 5]
  // 3: {holeId: 104, score: 5]

  // [{...}, {...}]
  // 0: {holeId: 101, score: 5]
  // 1: {holeId: 102, score: 5]

  // [{...}]
  // 0: {holeId: 101, score: 5]
});

Мне необходимо сформировать следующий массив:
[
  {
    id: 101,
    value: 1
  },
  {
    id: 102,
    value: 2
  },
  {
    id: 103,
    value: 3
  },
  {
    id: 104,
    value: 4
  }
]

Его длина равна длине самого большого массива.
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
john36allTa
@john36allTa
alien glow of a dirty mind
const players = data[0].locations[0].players;
const holes = new Array();
for (player of players){
	holes.filter(f=>f.id === player.holeId).length === 0 ? holes.push({id: player.holeId, value: player.score}) : holes.filter(f=>f.id === player.holeId)[0].value+= player.score;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы