无法将密钥设置为for循环中的对象

时间:2018-11-19 09:54:41

标签: javascript arrays loops for-loop

我正在尝试将其放入数组,并希望在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}}值

请在这里帮助我做错了。

2 个答案:

答案 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