为什么我的数组被覆盖?

阿米什·约翰(AmishJohn)81

我正在为项目使用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));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章