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

推荐阅读
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 在Qt框架中,信号与槽机制是一种独特的组件间通信方式。本文探讨了这一机制相较于传统的C风格回调函数所具有的优势,并分析了其潜在的不足之处。 ... [详细]
  • 本文详细介绍了如何在 Node.js 环境中利用 Nodemailer 库实现邮件发送功能,包括环境配置、代码实现及常见问题解决方法。 ... [详细]
  • 嵌套列表的扁平化处理
    本文介绍了一种方法,用于遍历嵌套列表中的每个元素。如果元素是整数,则将其添加到结果数组中;如果元素是一个列表,则递归地遍历这个列表。此方法特别适用于处理复杂数据结构中的嵌套列表。 ... [详细]
  • 本文详细介绍了如何在循环双链表的指定位置插入新元素的方法,包括必要的步骤和代码示例。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 文章目录前言Program(程序)Identifier(标识符)Literal(字面量)Vari ... [详细]
  • 实现系统调用
    实现系统调用一、实验环境​本次操作还是基于上次编译Linux0.11内核的实验环境进行操作。环境如下:二、实验目标​通过对上述实验原理的认识,相信 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • mysql数据库json类型数据,sql server json数据类型
    mysql数据库json类型数据,sql server json数据类型 ... [详细]
  • 管理UINavigationController中的手势返回 - Managing Swipe Back Gestures in UINavigationController
    本文介绍了如何在一个简单的闪存卡片应用中实现平滑的手势返回功能,以增强用户体验。 ... [详细]
  • 本题涉及一个长度为n的序列{ai},代表一系列树木的美学价值。任务是处理m个查询,每个查询提供三个参数l、r和P,目标是在所有满足l < l' ... [详细]
  • 题目编号:2049 [SDOI2008]Cave Exploration。题目描述了一种动态图操作场景,涉及三种基本操作:断开两个节点间的连接(destroy(a,b))、建立两个节点间的连接(connect(a,b))以及查询两节点是否连通(query(a,b))。所有操作均确保图中无环存在。 ... [详细]
  • 题目描述:计算从起点到终点的最小能量消耗。如果下一个单元格的风向与当前单元格相同,则消耗为0,否则为1。共有8个可能的方向。 ... [详细]
  • 尽管Medium是一个优秀的发布平台,但在其之外拥有自己的博客仍然非常重要。这不仅提供了另一个与读者互动的渠道,还能确保您的内容安全。本文将介绍如何使用Bash脚本将Medium文章迁移到个人博客。 ... [详细]
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社区 版权所有