2016-09-09 17 views
0

私はこのコードに問題があります。私がdaysArrayの項目をforループ(console.log(daysArray [i]);)に出力すると、正しい日付が返されますが、forループの後にすべてのdaysArray項目の最後の日付が返されます。 お願いします。forループによる日付の配列

public getFullMonth(date: Date): Array<Date> { 
    var firstDay = this.getSunday(date); 
    var daysArray: Array<Date> = Array<Date>(); 

    for (var i = 0; i < 43; i++) { 
     firstDay.setDate(firstDay.getDate() + 1); 
     daysArray[i] = firstDay; 
     console.log(daysArray[i]); 
    } 

    console.log(daysArray.length); 
    console.log(daysArray[0]); 
    console.log(daysArray[30]); 
    return daysArray; 
} 
+0

正確に何をしたいですか?あなたはこれのためにフィドルを共有することができますか? – Manjuboyz

+0

あなたの日付の配列を共有できますか? –

答えて

2

問題は、あなたが常にDateの同じインスタンスを使用することで、あなたは新しいものを作成することはありませんので、daysArray内のすべての項目は、まったく同じインスタンスです。

firstDay.setDate(firstDay.getDate() + 1); 

その後、あなたが実際にすべての項目の値を変更します。あなたはそのための

、。
あなたはすべての項目のための新しいインスタンスを作成する必要があります。以前の1の「クローン」であるDateの新しいインスタンスを作成します

firstDay = new Date(firstDay.getTime()); 

を:各反復が今していること

public getFullMonth(date: Date): Array<Date> { 
    var firstDay = this.getSunday(date); 
    var daysArray: Array<Date> = Array<Date>(); 

    for (var i = 0; i < 43; i++) { 
     firstDay = new Date(firstDay.getTime()); 
     firstDay.setDate(firstDay.getDate() + 1); 
     daysArray[i] = firstDay; 
     console.log(daysArray[i]); 
    } 

    console.log(daysArray.length); 
    console.log(daysArray[0]); 
    console.log(daysArray[30]); 
    return daysArray; 
} 

お知らせ。

+0

ありがとうございます。 :) –

0

問題は簡単に解決できます。配列の各位置に同じアイテムをコピーするだけです。これは、forループの各ステップで設定した値を上書きすることを意味します。

アレイの位置ごとに新しいオブジェクトを作成するだけで、エラーは発生しなくなります。この

ような何か
for (var i =0; i < 43; i++) { 
    var nDay = new Date(); 
    nDay.setDate(firstDay.getDate() + i + 1); 
    daysArray[i] = nDay; 
    console.log(daysArray[i]); 
} 
関連する問題