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”?并指定哪个对象被哪个对象覆盖?哦,是的,我的错。谢谢你的帮助!