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