Vlad024
@Vlad024

Как отфильтровать такой массив объектов?

Массив.
const data = [
  {
    id: '1741B',
    gamer: {
      id: '61925',
      name: 'Вася',
    },
    rounds: [
      {
        id: '1B0A5',
        position: 4,
        number: 1,
      },
      {
        id: '00EDA',
        position: 3,
        number: 2,
      },
      {
        id: '1A1BA',
        position: 1,
        number: 3,
      },
    ],
    position: 1,
    round_number: 3,
  },
  {
    id: 'F51C3',
    gamer: {
      id: 'D80C7',
      name: 'Петр',
    },
    rounds: [
      {
        id: '84544',
        position: 5,
        number: 1,
      },
      {
        id: '876C9',
        position: 4,
        number: 2,
      },
      {
        id: '900C0',
        position: 2,
        number: 3,
      },
    ],
    position: 2,
    round_number: 3,
  },
  {
    id: 'DE450',
    gamer: {
      id: '2F7E4',
      name: 'Олег',
    },
    rounds: [
      {
        id: '6FAB8',
        position: 3,
        number: 1,
      },
      {
        id: 'C0069',
        position: 5,
        number: 2,
      },
      {
        id: 'CF3D4',
        position: 3,
        number: 3,
      },
    ],
    position: 3,
    round_number: 3,
  },
  {
    id: 'B8005',
    gamer: {
      id: '0B61C',
      name: 'Ольга',
    },
    rounds: [
      {
        id: 'B349C',
        position: 8,
        number: 1,
      },
      {
        id: 'A6A61',
        position: 6,
        number: 2,
      },
      {
        id: '58CA4',
        position: 4,
        number: 3,
      },
    ],
    position: 4,
    round_number: 3,
  },
  {
    id: '902D3',
    gamer: {
      id: '7F1A2',
      name: 'Виталий',
    },
    rounds: [
      {
        id: 'DEE8A',
        position: 10,
        number: 1,
      },
      {
        id: '93F73',
        position: 7,
        number: 2,
      },
      {
        id: '89A35',
        position: 5,
        number: 3,
      },
    ],
    position: 5,
    round_number: 3,
  },
  {
    id: '18EA0',
    gamer: {
      id: '6872B',
      name: 'Максим',
    },
    rounds: [
      {
        id: '03B76',
        position: 7,
        number: 1,
      },
      {
        id: '3A58F',
        position: 9,
        number: 2,
      },
      {
        id: '0E64A',
        position: 6,
        number: 3,
      },
    ],
    position: 6,
    round_number: 3,
  },
  {
    id: '12A41',
    gamer: {
      id: 'E4479',
      name: 'Татьяна',
    },
    rounds: [
      {
        id: 'D14AD',
        position: 6,
        number: 1,
      },
      {
        id: 'E9E40',
        position: 2,
        number: 2,
      },
      {
        id: '0AFB2',
        position: 7,
        number: 3,
      },
    ],
    position: 7,
    round_number: 3,
  },
  {
    id: '52ABC',
    gamer: {
      id: '3669A',
      name: 'Александр',
    },
    rounds: [
      {
        id: '4F781',
        position: 1,
        number: 1,
      },
      {
        id: '86A71',
        position: 8,
        number: 2,
      },
      {
        id: '5B03C',
        position: 8,
        number: 3,
      },
    ],
    position: 8,
    round_number: 3,
  },
  {
    id: '98887',
    gamer: {
      id: 'E071F',
      name: 'Алексей',
    },
    rounds: [
      {
        id: 'A8D6B',
        position: 11,
        number: 1,
      },
      {
        id: '11991',
        position: 11,
        number: 2,
      },
      {
        id: '05D0A',
        position: 9,
        number: 3,
      },
    ],
    position: 9,
    round_number: 3,
  },
  {
    id: '831EC',
    gamer: {
      id: '1A7B0',
      name: 'Надежда',
    },
    rounds: [
      {
        id: 'C6494',
        position: 9,
        number: 1,
      },
      {
        id: 'A866A',
        position: 10,
        number: 2,
      },
      {
        id: '64B10',
        position: null,
        number: 3,
      },
    ],
    position: null,
    round_number: 3,
  },
  {
    id: '95A6B',
    gamer: {
      id: 'C50F7',
      name: 'Станислав',
    },
    rounds: [
      {
        id: '2ED5D',
        position: 2,
        number: 1,
      },
      {
        id: '314BA',
        position: null,
        number: 2,
      },
    ],
    position: null,
    round_number: 2,
  },
  {
    id: 'D0A2C',
    gamer: {
      id: '62BB4',
      name: 'Катя',
    },
    rounds: [
      {
        id: 'A944F',
        position: null,
        number: 1,
      },
    ],
    position: null,
    round_number: 1,
  },
];

Ожидаемый результат:
Выбрали раунд № 1 - нужно сформировать массив объектов с игроками (все они прошли 1 раунд)
Вася, Петр, Олег, Ольга, Виталий, Максим, Татьяна, Александр, Алексей, Надежда, Станислав
- Катя не входит, так как в выбранном или в прошедшем раунде игрок выбыл

Выбрали раунд № 2 - нужно сформировать массив объектов с игроками (все они прошли 2 раунд)
Вася, Петр, Олег, Ольга, Виталий, Максим, Татьяна, Александр, Алексей, Надежда
- Катя и Станислав не входят, так как в выбранном или в прошедшем раунде игрок выбыл

Выбрали раунд № 3 - нужно сформировать массив объектов с игроками (все они прошли 3 раунд)
Вася, Петр, Олег, Ольга, Виталий, Максим, Татьяна, Александр, Алексей
- Катя, Надежда и Станислав не входят, так как в выбранном или в прошедшем раунде игрок выбыл

В своем решении какая-то каша из массивов получается в результате:

const selectRound = 3;

const results = data.map((item) => {
  return item.rounds.map((itm) => {
    if (itm.position >= 1 && itm.position <= selectRound) {
      return item;
    }
  });
});

console.log(results);
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
data.filter(n => n.rounds[round - 1]?.position)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В массив .rounds можно не смотреть, всё в основном наборе данных лежит.
data.filter((u) => u.round_number > round || u.position);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы