热门标签 | 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)

推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
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社区 版权所有