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({...})