Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确迭代一个日期数组并将值赋给另一个数组?_Javascript_Reactjs_Momentjs - Fatal编程技术网

Javascript 如何正确迭代一个日期数组并将值赋给另一个数组?

Javascript 如何正确迭代一个日期数组并将值赋给另一个数组?,javascript,reactjs,momentjs,Javascript,Reactjs,Momentjs,我有一个小的日历应用程序。为此,有一个数组,日期,如下所示: const dates = [Thu Oct 01 2020 00:00:00 GMT+0400 (Azerbaijan Standard Time), Thu Oct 08 2020 00:00:00 GMT+0400 (Azerbaijan Standard Time), Thu Oct 15 2020 00:00:00 GMT+0400 (Azerbaijan Standard Time),

我有一个小的日历应用程序。为此,有一个数组,
日期
,如下所示:

     const dates = [Thu Oct 01 2020 00:00:00 GMT+0400 (Azerbaijan Standard Time), 
      Thu Oct 08 2020 00:00:00 GMT+0400 (Azerbaijan Standard Time), 
      Thu Oct 15 2020 00:00:00 GMT+0400 (Azerbaijan Standard Time), 
      Thu Oct 22 2020 00:00:00 GMT+0400 (Azerbaijan Standard Time), 
      Thu Oct 29 2020 00:00:00 GMT+0400 (Azerbaijan Standard Time), 
      Thu Nov 05 2020 00:00:00 GMT+0400 (Azerbaijan Standard Time)]
我不是在使用forEach循环对日期进行迭代,每次迭代时将值设置为一个对象,并将该对象推送到另一个数组中。代码如下所示。它是React的基于类的组件中的代码,因此使用this.data访问数据

      data = {};
      dataArray = [];
      dates.forEach((date) => {
              this.data.slots = values; //some other data from code
              this.data.date = moment(date).toDate();
              this.dataArray.push(this.data);
              console.log(this.dataArray);
            });
但是,当我控制台dataArray的值时,我无法理解控制台中的输出。它最初显示的是正确的值,但展开后,它显示的是上次迭代的日期值。Ss附在下面

当日期等于2020年11月5日星期四时,屏幕截图是单个迭代的控制台值。但是每个迭代的情况都是相同的。它显示写入的正确值,并在展开时给出日期中的最后一个数组值


当然,整个
dataArray
在每个索引中都有日期等于11月5日的对象。为什么会发生这种情况?

您的代码示例缺少一些细节,因此我将指出一些看起来“奇怪”的事情

  • 您指的是
    this.data
    ,而前几行没有将它们显示为对象的道具,而是简单的
    data
    dataArray
  • 您可以使用
    map
    而不是
    forEach
    ->
    const dataArray=dates.map((date)=>moment(date).toDate()}
  • 似乎您正在通过使用
    this.data
    (作为引用推送)覆盖上一次迭代的结果。因此,您推送的所有内容都指向同一个对象(在每次迭代中覆盖)

  • 但是
    dataArray
    也显示了相同的内容,即每个索引都将date属性设置为2020年11月5日。在循环的每一轮中,只有
    data
    对象被修改。最后,您有
    dates.length
    dataArray
    中存储的
    数据的引用(因此它们都显示了相同的日期).在
    .forEach()
    中创建一个新对象,并将其放入
    数据数组中
    对不起,我没有理解您的意思,请您详细说明一下或修改一下代码,以便我更好地了解TIA
    this.dataArray.push(this.data);
    不会将新对象推送到
    dataArray
    中。它推送到存储在
    中的一个对象的引用。data
    -这现在更有意义了。非常感谢。我使用另一种方法,在运行时直接创建对象。我也通过提供答案编辑了问题。我共享的代码在一个类库中React和data的d组件是该类的属性。这就是我编写此.data的原因。抱歉,忘了在上面提到您的
    日期
    值数组是什么样子的?我已将日期数组放置在问题的代码中,您正在每个循环中覆盖
    This.date
    ,并将其添加到
    This.dataArray
    。自
    this.date
    只是一个参考,this.dataArray
    中的所有值都是最后一个值。。