Заполните массив с датами

Действительно не могу понять, почему даты, которые я помещаю в массив, не являются датами, которые появляются, когда я вызываю массив в консоли. то есть я ожидал бы, что первая запись в массиве будет сегодняшней датой, что является результатом обоих предупреждений, но когда я проверяю первую позицию массива, вместо него есть вчерашняя дата!?

function sevenDayPeriod(date) {

    for (var i = 0; i <=6; i++) {

        alert(date);    //check to see date is today's date
        dateRange[i] = date;
        alert(dateRange[i]);    //confirm that what I've pushed to array is today's date

        date = date.setDate(date.getDate() - 1);
        date = new Date(date);
    }
};

var dateRange = [];
var today  = new Date();

sevenDayPeriod(today);

Спасибо

2 ответа

Решение
...
dateRange[i] = date;
alert(dateRange[i]);    //confirm that what I've pushed to array is today's date
date = date.setDate(date.getDate() - 1);
...

В первой из приведенных выше строк вы устанавливаете элемент массива ih равным date (ссылка), затем вы показываете его, а затем вы меняете тот же объект с setDate что приводит к вашей проблеме, так как элемент массива все еще указывает на этот измененный объект.
Вы можете решить это, например, с помощью другой переменной, например, так

...
var prevDay = new Date();
prevDay.setDate(date.getDate() - 1);
date = prevDay;
...  

или создайте его копию, прежде чем помещать в массив

function sevenDayPeriod(date) {
    for (var i = 0; i <=6; i++) {
 //date object is as a "pointer", you have to clone it
 var copiedDate = new Date(date);
  
        //alert(date); //check to see date is today's date
        dateRange[i] = copiedDate;
        //alert(dateRange[i]); //confirm that what I've pushed to array is today's date
  
        date = date.setDate(date.getDate() - 1);
        date = new Date(date);
    }
};

var dateRange = [];
var today  = new Date();

sevenDayPeriod(today);

console.log(dateRange);

Когда вы изменяете дату, вы также изменяете дату. Вы должны клонировать это.

Другие вопросы по тегам