簡體   English   中英

為什么我的數組被覆蓋?

[英]Why is my array being overwritten?

我正在為項目使用node.js,並且試圖將某些日期添加到數組中。 但是,當我這樣做時,它將覆蓋添加當前日期的整個數組。 資料來源:

let startDate = new Date(2014, 0, 8, 19, 0, 0)
let endDate = new Date(2014, 0, 11, 19, 0, 0)
let datesToDownload = []
let datesInDB = [new Date(2014, 0, 8, 19, 0, 0), new Date(2014, 0, 9, 19, 0, 0), new Date(2014, 0, 10, 19, 0, 0), new Date(2014, 0, 8, 11, 0, 0)]

for (let i = startDate; i <= endDate; i.setDate(i.getDate() + 1)) {
  console.log('CHECKING DATE: ' + i.toDateString())

  if (!(datesInDB2.indexOf(i.toDateString()) >= 0)) {
    console.log('NEW RECORD FOUND FOR: ' + i.toDateString())
    datesToDownload.push(i)
    console.log('i: ' + i)

    for (let j in datesToDownload) {
      console.log('element ' + j + ': ' + datesToDownload[j])
    }
  }
}

輸出看起來像這樣:

CHECKING DATE: Wed Jan 08 2014
NEW RECORD FOUND FOR: Wed Jan 03 2014

i: Wed Jan 08 2016 20:00:00 GMT-0400 (Eastern Daylight Time)
element 0: Wed Jan 08 2016 20:00:00 GMT-0400 (Eastern Daylight Time)

CHECKING DATE: Thur Jan 09 2016
NEW RECORD FOUND FOR: Thur Jan 09 2016

i: Thur Jan 09 2016 20:00:00 GMT-0400 (Eastern Daylight Time)
element 0: Thur Jan 09 2016 20:00:00 GMT-0400 (Eastern Daylight Time)
element 1: Thur Jan 09 2016 20:00:00 GMT-0400 (Eastern Daylight Time)

CHECKING DATE: Fri Jan 10 2016
NEW RECORD FOUND FOR: Fri Jan 10 2016

i: Fri Jan 10 2016 20:00:00 GMT-0400 (Eastern Daylight Time)
element 0: Fri Jan 10 2016 20:00:00 GMT-0400 (Eastern Daylight Time)
element 1: Fri Jan 10 2016 20:00:00 GMT-0400 (Eastern Daylight Time)
element 2: Fri Jan 10 2016 20:00:00 GMT-0400 (Eastern Daylight Time)

......

請注意,盡管添加了元素,但元素如何全部更改為當前插入日期。

為什么會這樣呢? 我該如何預防?

您每次迭代都將完全相同的Date實例推入數組。 但是,您可以創建它的副本

  datesToDownload.push(new Date(i));

日期是一個對象,並通過引用傳遞。 在for循環中,您正在更改日期:

for (let i = startDate; i <= endDate; i.setDate(i.getDate() + 1)) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM