热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数组推送“不同信息”导致每个迭代推送相同的第一个迭代

我试图每天3次通知用户有关他的用药的信息,所以我创建了:

我试图每天3次通知用户有关他的用药的信息,所以我创建了:


let timesPerDay = []
const today = moment();
//not working
for (let i = 0; i <3; i++) {
timesPerDay.push(today.add(8 * i,"hour"));
}
//working normally
for (let i = 0; i <3; i++) {
console.log(today.add(8 * i,"hour"));
}
console.log(timesPerDay)

数组推送“不同信息”导致每个迭代推送相同的第一个迭代


发生这种情况是因为您使用同一时刻的对象来推动
所以这应该有帮助


let timesPerDay = []
for (let i = 0; i <3; i++) {
timesPerDay.push(moment().add(8*i,"hour"));
}
for (let i = 0; i <3; i++) {
console.log(moment().add(8*i,"hour"));
}
console.log(timesPerDay)


,

逐步引导您完成代码:

let timesPerDay = [] // create an array
const today = moment(); // create a moment object
for (let i = 0; i <3; i++) {
// add hours to moment object
// push a reference to that moment object into your array
// it's always a reference to the SAME moment object,so the same object is referenced in your array multiple times
// mutations to that object will show everywhere it is referenced
timesPerDay.push(today.add(8 * i,"hour"));
}
for (let i = 0; i <3; i++) {
// add hours to same moment object
// log the string representation of that object AT EACH ITERATION
// once transformed to a string,the string representation will not change as it is no longer part of the object
console.log(today.add(8 * i,"hour"));
}
console.log(timesPerDay) // log string representation of your array,which is just 3 references to the same object

,

由于momentjs .add正对today变量进行更改,因此所有日期都将相同(等于开始日期+ 0 + 8 + 16小时),因为您在所有时间。

您必须克隆日期才能重新开始。

const today = moment()
console.log(`Today: ${today}`)
// Today: Wed Dec 18 2019 17:14:11 GMT+0100
// Loop 0: Wed Dec 18 2019 17:14:11 GMT+0100
// Loop 1: Thu Dec 19 2019 01:14:11 GMT+0100
// Loop 2: Thu Dec 19 2019 09:14:11 GMT+0100
const times = [0,1,2].map(offset => {
const date = moment(today) // clone
date.add(8*offset,"hour")
console.log(`Loop ${offset}: ${date}`)
return date
})

编辑:不是+ 8 + 16 + 24而是0 + 8 + 16

编辑2:证明console.log的第二次迭代没有输出OP想要的内容:

let timesPerDay = []
const today = moment();
console.log(`today: ${today}`)
// today: Wed Dec 18 2019 17:03:02 GMT+0100
// Loop 0: Wed Dec 18 2019 17:03:02 GMT+0100
// Loop 1: Thu Dec 19 2019 01:03:02 GMT+0100
// Loop 2: Thu Dec 19 2019 17:03:02 GMT+0100
// Last loop is 24 hours later than the initial date!
for (let i = 0; i <3; i++) {
// Mutates your start date
const newDate = today.add(8*i,"hour");
timesPerDay.push(newDate);
console.log(`Loop ${i}: ${newDate}`);
}
console.log(timesPerDay)

推荐阅读
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • [JavaScript] 多数前端工程师都没注意到的一个关于console.log()的坑
    [JavaScript]多数前端工程师都没注意到的一个关于console.log()的坑请阅读以下代码并猜测结果:functiontest(){le ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 判断数组是否全为0_连续子数组的最大和的解题思路及代码方法一_动态规划
    本文介绍了判断数组是否全为0以及求解连续子数组的最大和的解题思路及代码方法一,即动态规划。通过动态规划的方法,可以找出连续子数组的最大和,具体思路是尽量选择正数的部分,遇到负数则不选择进去,遇到正数则保留并继续考察。本文给出了状态定义和状态转移方程,并提供了具体的代码实现。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
author-avatar
-鹊巢鸠占
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有