简体   繁体   English

为什么我的数组被覆盖?

[英]Why is my array being overwritten?

I am using node.js for a project and I am trying to add certain dates to an array. 我正在为项目使用node.js,并且试图将某些日期添加到数组中。 However, when I do, it overwrites the entire array with the current date being added. 但是,当我这样做时,它将覆盖添加当前日期的整个数组。 Source below: 资料来源:

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])
    }
  }
}

And the output looks like this: 输出看起来像这样:

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)

......

Notice how the elements are all changed to the current date being inserted, though an element is being added. 请注意,尽管添加了元素,但元素如何全部更改为当前插入日期。

Why is this happening? 为什么会这样呢? How can I prevent it? 我该如何预防?

You're pushing exactly the same Date instance into the array on each iteration. 您每次迭代都将完全相同的Date实例推入数组。 You can create a copy of it however: 但是,您可以创建它的副本

  datesToDownload.push(new Date(i));

A date is an object, and is passed by reference. 日期是一个对象,并通过引用传递。 In your for loop you are changing the date: 在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