2016-09-15 4 views
2

Wirklich kann nicht sehen, warum die Daten, die ich in ein Array drängen sind nicht die Daten, die herauskommen, wenn ich das Array in der Konsole aufrufen. h., ich würde erwarten, dass der erste Eintrag im Array das heutige Datum ist, das kommt von beiden Alarmaufrufen zurück, aber wenn ich die erste Position des Arrays überprüfe, hat es stattdessen das gestrige Datum !?Füllen Sie ein Array mit Daten

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); 

Dank

Antwort

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

In der ersten der obigen Zeilen man den i-ten Array-Elements zu date (Referenz) gesetzt ist, dann zeigen sie es und danach man das gleiche Objekt mit setDate ändern die sich ergibt, in Ihrem Problem, da das Array-Element immer noch auf dieses geänderte Objekt zeigt.
Sie können das z. mit einem anderen var wie so

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

oder eine Kopie davon erstellen, bevor es in das Array

+3

Danke für die Erklärung. Macht Sinn und hoffentlich etwas, von dem ich lernen werde! –

2

function sevenDayPeriod(date) { 
 
    for (var i = 0; i <=6; i++) { 
 
\t //date object is as a "pointer", you have to clone it 
 
\t var copiedDate = new Date(date); 
 
\t \t 
 
     //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 
 
\t \t 
 
     date = date.setDate(date.getDate() - 1); 
 
     date = new Date(date); 
 
    } 
 
}; 
 

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

 
sevenDayPeriod(today); 
 

 
console.log(dateRange);

Wenn Sie das Datum zu drücken ändern, sind Sie Sie sind auch verschobenes Datum ändern. Du musst es klonen.

Verwandte Themen