Задать вопрос
v1sher47
@v1sher47

Как перебрать массив в массиве и присвоить каждому элементу значения из другого массива?

Всем привет!

Есть участники participants,
const participants = [
    {id: 1, name: 'Anakin Skywalker'},
    {id: 2, name: 'Padmé Amidala'},
    {id: 3, name: 'Luke Skywalker'},
    {id: 4, name: 'Princess Leia'},
]

их нужно расселить по номерам в отеле в любом порядке (без разницы кто с кем).
Отель предоставляет ровно то колличесво мест - сколько участников (5 комнат по одному месту или 2 комнаты по 3 места и тд - не рабочий вариант)

const hotel = [
    {
        room: [
            {id: '', name: ''}
        ]
    },
    {
        room: [
            {id: '', name: ''},
            {id: '', name: ''}
        ]
    },
    {
        room: [
            {id: '', name: ''}
        ]
    }
]


Мое решение
hotel.map(h => {
    h.room.map((r) => {
      r.id = participants[0].id
      r.name = participants[0].name

      participants.shift()

    })
  })


Здесь я перебираю массив hotel и нахожу в нем еще массив room - перебирая его, я присваиваю каждому объекту значения первого участника из массива participants и по завершению установки значений - удаляю его используя метод shift() (аналогичный ему .splice(0, 1))

Когда в room один объект (одно место), то каждый участник находится в своей комнате(отрабатывает на ура), а когда в комнате можно расселить двух участников или больше, происходит перетирание на последнего участника в этой комнате

Результат
const hotel = [
    {
        room: [
            {id: '1', name: 'Anakin Skywalker'}
        ]
    },
    {
        room: [
            {id: '3', name: 'Luke Skywalker'},  // должна быть {id: 2, name: 'Padmé Amidala'},
            {id: '3', name: 'Luke Skywalker'}
        ]
    },
    {
        room: [
            {id: '4', name: 'Princess Leia'}
        ]
    }
]


Так же еще пример результата другого отеля с другими номерами
const hotel = [
    {
        room: [
            {id: '', name: ''},
            {id: '', name: ''}
        ]
    },
    {
        room: [
            {id: '', name: ''},
            {id: '', name: ''}
        ]
    },
]

const hotel = [
    {
        room: [
            {id: 2, name: 'Padmé Amidala'},
            {id: 2, name: 'Padmé Amidala'}
        ]
    },
    {
        room: [
            {id: '4', name: 'Princess Leia'},
            {id: '4', name: 'Princess Leia'}
        ]
    },
]


Помогите пожалуйста понять, что не так я делаю((
  • Вопрос задан
  • 285 просмотров
Подписаться 1 Простой 7 комментариев
Решение пользователя otdameskapizm К ответам на вопрос (3)
otdameskapizm
@otdameskapizm
Помог ответ? Отметь решением...
Вот эта функция не меняет входные данные, так как она внутри себя создает новые и их возвращает
const checkIntoHotel = (hotel, people) => {
  let index = 0;
  const checkedHotel = hotel.map(({ room }) => room.map(({ id, name }) => {
    const {id: parId, name: parName } = people[index];
    index += 1;
    return { id: parId, name: parName };
  }))
  return checkedHotel;
};
Ответ написан
Комментировать