所有增量日期值都存储为对象JavaScript

时间:2016-06-16 06:51:03

标签: javascript arrays google-sheets

我对编码很新,所以这可能是一个愚蠢的问题但是,我正在尝试使用for循环来创建一个对象的多个实例,每个实例的日期增加一天。我的问题是该对象的每个实例最终都采用相同的日期值:最终迭代的日期值。我做了一些搜索,一个答案似乎是我用来跟踪日期的变量是静态的。我不知道这是我的问题还是确实如何解决它,所以任何帮助都会非常感激。

//getMonday is a function that returns the first day of the week from a given d
var TestObject = function(date) {
this.date = date;
}

function dateTest() {
  var today = new Date();
  var contents = [];
  var orderDate = new Date(getMonday(today));
  var j = 0;
  for(var k = 1; k<6; k++) {
    for(var i = 0; i<6; i++) {
        contents[j] = new TestObject(orderDate);
        Logger.log("filling in contents[" + j + "]. I'm putting in date: " + orderDate);
        j++;      
    }
    orderDate.setDate(orderDate.getDate() + 1);
  }
  for(var i = 0; i < contents.length; i++) {
    Logger.log(contents[i]);
  }
}

有两个循环因为我需要在我的特定代码实例中循环两次,它会从一个spreadhseet中删除值,并且只在行号改变时增加日期。

for循环中的Log打印出所有正确的日期,但是当dateTest对象全部打印出来时,它们都包含最终的日期迭代。

1 个答案:

答案 0 :(得分:0)

在Javascript中,分配时不会复制对象。它们是通过引用分配的。

Request()构造函数中,这行代码:

this.date = date

没有复制date参数,只是在传递的this.date对象中指向orderDate。当orderDate对象将来发生更改时,this.date将指向已更改的对象。因此,当您在循环中更改orderDate对象时,每个Request对象最终都指向同一个orderDate对象,因此它们都会在循环结束时看到该值。 / p>

您可以通过以下方式修复代码:

this.date = new Date(date);

这将制作传入日期对象的副本。