【问题标题】:New object getting overwritten with old object in loop in javascript新对象被javascript循环中的旧对象覆盖
【发布时间】:2021-03-28 07:36:32
【问题描述】:

我的预期输出是这样的,但是如果月份相同,新对象会覆盖旧对象。你能找出要解决的问题吗?

[
December: {
  2: {
    id: 2,
    amount: 1000,
    date: "2020-12-02 17:45:34"
  },
   5: {
    id: 5,
    amount: 200,
    date: "2020-12-10 17:45:34"
  }
},
November: {
  1: {
    id: 1,
    amount: 500,
    date: "2020-11-10 17:45:34"
  },
  4: {
    id: 4,
    amount: 100,
    date: "2020-11-15 17:45:34"
  },
},
October: {
  3: {
    id: 3,
    amount: 500,
    date: "2020-10-20 17:45:34"
  }
}
]

这是我的代码,如果你能帮忙的话。会好很多

var data = [
  {
    id: 1,
    amount: 500,
    date: "2020-11-10 17:45:34"
  },
  {
    id: 2,
    amount: 1000,
    date: "2020-12-02 17:45:34"
  },
  {
    id: 3,
    amount: 500,
    date: "2020-10-20 17:45:34"
  },
  {
    id: 4,
    amount: 100,
    date: "2020-11-15 17:45:34"
  },
  {
    id: 5,
    amount: 200,
    date: "2020-12-10 17:45:34"
  }
]

var monthNames = [
  "January",
  "February",
  "March",
  "April",
  "May",
  "June",
  "July",
  "August",
  "September",
  "October",
  "November",
  "December"
];
var monthlyData = {};
var date = new Date();
var lastMonthsArray = [];
for (let x = 0; x < 12; x++) {
  var MONTH = monthNames[date.getMonth()];
  var YEAR = date.getFullYear();

  lastMonthsArray.push(MONTH + " " + YEAR);

  for (let i in data) {
    var itemDate = new Date(data[i].date);
    var itemMonth = monthNames[itemDate.getMonth()];
    var itemYear = itemDate.getFullYear();
  
    var list = data[i]
    if (MONTH == itemMonth && YEAR == itemYear) {
      console.log("matched", list.id);
      monthlyData[itemMonth] = {};
      monthlyData[itemMonth][list.id] = {
        amount: list.amount,
        id: list.id,
        date: list.date
      };
      console.log("monthly data", monthlyData);
    }
  }
  date.setMonth(date.getMonth() - 1);
}

在我的代码中,我有一个带日期的数据,我想显示所有数据,但按它们的月份名称分组。所以基本上如果他们是 12 月份的 6 个数据,他们应该进入一个键:December 命名对象。但在我的代码中,12 月份的前 5 个数据被彼此覆盖,只有第 6 个数据可见。

【问题讨论】:

  • 你能分享你的预期输出吗?并删除垃圾邮件“aaaa”?并指定哪个对象被哪个对象覆盖?

标签: javascript arrays json object arraylist


【解决方案1】:

每次为每个月设置新对象时,您似乎都在覆盖数据

if (MONTH == itemMonth && YEAR == itemYear) {
  console.log("matched", list.id);

  // added a check to see if the object already exists
  if(!monthlyData[itemMonth])monthlyData[itemMonth] = {};

  monthlyData[itemMonth][list.id] = {
    amount: list.amount,
    id: list.id,
    date: list.date
  };
  console.log("monthly data", monthlyData);
}

【讨论】:

  • 哦,是的,我的错。谢谢你的帮助!
猜你喜欢
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
相关资源
最近更新 更多