我正在尝试将其放入数组,并希望在for循环中将键(dayOfWeek
)设置为obj
。
let array = []
const obj = { 'away': '17:30', 'sleep': '20:30' }
for (let room of rooms) {
let days = []
room.schedules.map(s => days.push(s.dayOfWeek))
days = new Set(days)
for(let i = 1; i <= 7; i++) {
obj.dayOfWeek = i
console.log(obj)
if(!days.has(i)) array.push(obj)
}
}
但是当我登录obj
时,总是得到等于dayOfWeek
的{{1}}值
请在这里帮助我做错了。
答案 0 :(得分:1)
您在内存中只有一个 对象-您正在将对同一对象的多个引用推入数组,同时重新分配了该对象的dayOfWeek
属性。相反,在推送时 clone 对象,以便数组具有 separate 对象:
for(let i = 1; i <= 7; i++) {
if(!days.has(i)) {
array.push({
...obj,
dayOfWeek: i
});
}
}
还请注意,如果使用.map
,则应使用结果映射数组,而不是push
指向外部数组:
let days = room.schedules.map(s => s.dayOfWeek);
答案 1 :(得分:1)
因为您只有1个obj
实例,并且在循环的每次迭代中都更改了dayOfWeek
的值,所以它将写入最后一个值(即7)。
相反,为每次迭代创建一个新的obj
。