Всем привет!
Есть участники 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'}
]
},
]
Помогите пожалуйста понять, что не так я делаю((