Не удалось установить ключ для объекта внутри цикла - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь вставить в массив и хочу установить ключ (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 значение равно 7

Помогите пожалуйста, что я тут не так делаю.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Поскольку у вас есть только 1 экземпляр obj, и вы меняете значение dayOfWeek на каждую итерацию цикла, поэтому в нем будет записано последнее значение (т. Е. 7).

Вместо этого создайте новый obj для каждой итерации.

0 голосов
/ 19 ноября 2018

В вашей памяти только один один объект - вы помещаете в массив несколько ссылок на один и тот же объект, переназначая свойство dayOfWeek этого объекта.Вместо этого клонируйте объект во время нажатия, чтобы массив содержал отдельных объектов:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...