javascript中新对象被循环中的旧对象覆盖

javascript中新对象被循环中的旧对象覆盖,javascript,arrays,json,object,arraylist,Javascript,Arrays,Json,Object,Arraylist,我的预期输出是这样的,但是如果月份相同,新对象将覆盖旧对象。你能确定要修什么吗 [ 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

我的预期输出是这样的,但是如果月份相同,新对象将覆盖旧对象。你能确定要修什么吗

[
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);
}
var数据=[
{
id:1,
金额:500,
日期:“2020-11-1017:45:34”
},
{
id:2,
金额:1000,
日期:“2020-12-02 17:45:34”
},
{
id:3,
金额:500,
日期:“2020-10-20 17:45:34”
},
{
id:4,
金额:100,
日期:“2020-11-1517:45:34”
},
{
id:5,
金额:200,
日期:“2020-12-1017:45:34”
}
]
var monthNames=[
“一月”,
“二月”,
“三月”,
“四月”,
“五月”,
“六月”,
“七月”,
“八月”,
“9月”,
“十月”,
“11月”,
“12月”
];
var monthlyData={};
变量日期=新日期();
var lastMonthsArray=[];
for(设x=0;x<12;x++){
var MONTH=monthNames[date.getMonth()];
var YEAR=date.getFullYear();
LastMonthArray.push(月+年);
for(让我输入数据){
var itemDate=新日期(数据[i].Date);
var itemMonth=monthNames[itemDate.getMonth()];
var itemYear=itemDate.getFullYear();
var列表=数据[i]
如果(月==项目月和年==项目年){
console.log(“匹配”,list.id);
monthlyData[itemMonth]={};
monthlyData[itemMonth][list.id]={
金额:list.amount,
id:list.id,
日期:list.date
};
console.log(“每月数据”,每月数据);
}
}
date.setMonth(date.getMonth()-1);
}

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

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

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);
}

你能分享一下你的预期产出吗?并删除垃圾邮件中的“aaaa”?并指定哪个对象被哪个对象覆盖?哦,是的,我的错。谢谢你的帮助!