1

オブジェクト リストの各オブジェクトに値を追加しています。しかし、すべてのループのすべてのオブジェクトに日付を追加する理由がわかりません。

これは私のコードです:

var emptyday: {
    "date":""
}

//make list of days in month
var monthlist = [];
for (i=0;i<=days_in_months;i++) {
    monthlist[i] = emptyday;
}

したがって、私の例では、days_in_months が 31 (日) であるとしましょう

いよいよ追加です

for (x=1;x<=days_in_months;x++) {

    console.log(x);
    if (x<10) {
        daynumber = "0" + x;
    } else {
        daynumber = x;
    }

    datestring = year + "-"+ (month+1) + "-" + daynumber;

    dayofmonth = monthlist[x]; 
    dayofmonth["date"] = datestring;
            //monthlist[x].date = datestring;

}

(dayofmonth["date"] = datestring または monthlist[x].date) を追加しようとすると、ループごとにすべてのオブジェクトのすべての日付値に追加されます。

最初のループの console.log は次のようになります。

[オブジェクト{日付= "2013-1-01"}、オブジェクト{日付= "2013-1-01"}、オブジェクト{日付= "2013-1-01"}、オブジェクト{日付= "2013-1-01 "}、オブジェクト{日付= "2013-1-01"}、オブジェクト{日付= "2013-1-01"}など

最初のループで 31 回

そして最後のループでは 2013-1-31 になります

その値をすべてのオブジェクトに追加する理由がわかりません。私は console.log を試し、あちこちでデバッグを行って値を読み取り、何が問題なのかを理解しようとしましたが、まだ解決策が見つかりませんでした

4

1 に答える 1

4

配列内の参照はすべて同じオブジェクトを指しています。Javascriptは値渡しです。だからあなたがするとき

//make list of days in month
var monthlist = [];
for (i=0;i<=days_in_months;i++) {
    monthlist[i] = emptyday;
}

配列内のすべての位置に参照のコピーをemptyday配置しています。参照のコピーはすべて同じオブジェクト リテラルを指しているため、1 つのオブジェクトへの参照の配列があります。

リストを使用するたびに、新しいオブジェクト リテラルを作成する必要があります。

var monthlist = [];
for (i=0;i<=days_in_months;i++) {
    monthlist[i] = {
       date: ""
    };
}
于 2013-01-04T13:39:42.280 に答える