Cannot set property 'id' of undefined

Создаю массив с вложенными в него объектами и пытаюсь его наполнить своими данными вылезает вот такая ошибка. Что я делаю не так почему не могу читать по ключу свойства и переписывать их?

    let roomsData = new Array(5).fill([{
    room: {
        id: '',
        title: '',
        users: [{nickname: 'Вася'},{nickname: 'Серёжа'},{nickname: 'Петя'}],
        messages:
            [{
                msg: 'Сообщение васи',
                date: getLocalTime(),
                nickname: 'Вася'
            }]
    }
}]);
initRoomData()

function initRoomData(){
    const rooms = new Array(5).fill('').map((_, i) => ({id:`${i}`, title:`Room ${i+1}` }))
    roomsData.forEach((value, i ,array) => {
        console.log(array)
        console.log(i)
        roomsData[i].room.id = '' + rooms[i].id
        roomsData[i].room.title = '' + rooms[i].title
    })
}
D:\Projects\Test_Task\server-chat\index.js:38
        roomsData[i].room.id = '' + rooms[i].id

TypeError: Cannot set property 'id' of undefined

    at D:\Projects\Test_Task\server-chat\index.js:38:30
    at Array.forEach (<anonymous>)
    at initRoomData (D:\Projects\Test_Task\server-chat\index.js:35:15)
    at Object.<anonymous> (D:\Projects\Test_Task\server-chat\index.js:31:1)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
    at internal/main/run_main_module.js:17:47

Ответы (1 шт):

Автор решения: Grundy

каждый элемент roomsData является массивом. У массива нет свойства room, соответственно значение будет undefined, и далее ошибка при попытке у этого undefined установить свойство id.

Для решения нужно либо обращаться у нулевому элементу:

roomsData[i][0].room.id

Либо при заполнении массива использовать объект, а не массив:

new Array(5).fill({...})
→ Ссылка