javascript - 从嵌套循环推送到数组的问题

标签 javascript arrays for-loop nested-loops

当我运行此命令时,除了数组推送之外,一切正常。 console.log(notificationdata);显示通知数据的值已正确更新,但查看 console.log(notifications) 我有 7 个相同的值,其值与 notificationdata 中的最后一个值匹配。不知怎的,推送到数组没有正确发生,我似乎无法弄清楚。有什么想法吗?

var notifications = [];
reminder.days.value = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
reminder.times = [00:00]

      var notificationdata = {
        title: "Nu är det dags att ta en dos",
        text: "Ta " + medication + " mot " + affliction + " nu.",
        smallIcon: "../images/DosAvi_badge.png",
        icon: "../images/DosAvi_icon.png",
        every: "week",
        foreground: true
      }
      notificationdata.id = reminder.id;
      for(const day of reminder.days.value){
        for(const time of reminder.times){
          notificationdata.firstAt = getNextDayOfTheWeek(day, new Date(`Mon Jan 01 2020 ${time}`));
          //notificationdata.firstAt = new Date(`Wen Feb 26 2020 21:55`);
          console.log(notificationdata);
          notifications.push(notificationdata);
        }
      }
      console.log(notifications)

      cordova.plugins.notification.local.schedule(notifications);
    }

最佳答案

notificationdata 是一个对象,在循环内您只需更改该对象的属性。向数组的推送会将对象的引用添加到数组中。所以你最终会得到一个包含 7 个对同一对象的引用的数组。要解决此问题,您必须先复制对象:

      for(const day of reminder.days.value){
        for(const time of reminder.times){
          const copyNotificationdata = {
              ...notificationdata,
              firstAt: getNextDayOfTheWeek(day, new Date(`Mon Jan 01 2020 ${time}`))
          }
          notifications.push(copyNotificationdata);
        }
      }

关于javascript - 从嵌套循环推送到数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60424202/

相关文章:

c - c中表格内的不同颜色

c++ - 将空数组传递给函数,填充数组并获取值

sql - plpgsql 错误 : RETURN cannot have a parameter in function returning void

r - 如何加速或矢量化 for 循环?

javascript - 在 Next.js 中根据屏幕尺寸渲染不同的组件

javascript - 如何删除 addClsOnOver 监听器 ExtJS

javascript - 选择下拉菜单后重定向到 URL

JavaScript 日期构造函数根据零填充创建不同的日期?

arrays - 我如何获得“其他”消息仅打印一次?

c - 需要解释奇数 for 循环/作用域问题