Angular - вставка элементов в массив в цикле обновляет все существующие значения массива новым значением - PullRequest
0 голосов
/ 22 мая 2019

Я помещаю даты недели в массив.

Если вы можете сослаться на код, // в строке хорошего значения Массив имеет правильное значение

Но каждый раз date.setDate (date.getDate () + 1); выполняет

Все значения массива автоматически обновляются с новым значением. Вместо простого нажатия на новый элемент в массиве, он помещает новый элемент в массив и заменяет все элементы массива новым элементом

  this.mondayDate = this.getMonday(this.viewDate);
  let dates = this.mondayDate;
  this.datesOfTheWeek = [];
  this.datesOfTheWeek.push(this.mondayDate);
  console.log(this.datesOfTheWeek);
  for(let i in [1,2,3,4,5,6]){
    console.log(this.datesOfTheWeek); // good value in the array
    dates.setDate(dates.getDate() + 1 );
    console.log(this.datesOfTheWeek); // bad value in the array

    this.datesOfTheWeek.push(dates);
    console.log(this.datesOfTheWeek);
  }

  console.log(this.datesOfTheWeek);

1-ая итерация: // содержит только выходные данные понедельника // неверное значение

Массив (1) [Вт 21 мая 2019 15:17:46 GMT + 0200 (heure d'été d’E…]

2-я итерация: // отправка вывода во вторник из // неверного значения

Array (2) [ср 22 мая 2019 15:17:46 GMT + 0200 (heure d'été d'E…, ср 22 мая 2019 15:17:46 GMT + 0200 (heure d'été d'E ...]

Значение массива в конце равно

Массив (6) [Вс 26 мая 2019 15:17:46 GMT + 0200 (heure d'été d'E…, Вс 26 мая 2019 15:17:46 GMT + 0200 (heure d'été d'E …, Вс 26 мая 2019 15:17:46 GMT + 0200 (heure d'été d'E…, вс 26 мая 2019 15:17:46 GMT + 0200 (heure d'été d'E…, вс 26 мая 2019 15:17:46 GMT + 0200 (heure d'été d'E…, Sun 26 мая 2019 г. 15:17:46 GMT + 0200 (heure d'été d'E…]

Но в нем должны быть даты с 20 по 26 мая

1 Ответ

1 голос
/ 22 мая 2019

Это потому, что dates выглядит как объект Date, а не как примитив (поэтому, если вы измените его, все ссылки на него будут указывать на измененное значение). Вам нужно создать копию: вместо

    dates.setDate(dates.getDate() + 1 );
    console.log(this.datesOfTheWeek); // bad value in the array

    this.datesOfTheWeek.push(dates);

сделать что-то вроде

    let newDate = new Date(dates);
    newDate.setDate(dates.getDate() + 1 );
    console.log(this.datesOfTheWeek);

    this.datesOfTheWeek.push(newDate);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...