Javascript对象月对应值计算

Javascript对象月对应值计算,javascript,arrays,object,numbers,calculation,Javascript,Arrays,Object,Numbers,Calculation,要获取每个重复月份的num总数,并将唯一月份的值保留在此对象数组中的状态吗 [ {num:5000,月:“九月”}, {num:6000,月:“九月”}, {num:4500,月:“八月”}, {num:3500,月:“八月”}, {num:5000,月:“一月”}, {num:6000,月份:“二月”} ]使用减少 const输入=[ {num:5000,月:“九月”}, {num:6000,月:“九月”}, {num:4500,月:“八月”}, {num:3500,月:“八月”}, {n

要获取每个重复月份的num总数,并将唯一月份的值保留在此对象数组中的状态吗

[
{num:5000,月:“九月”},
{num:6000,月:“九月”},
{num:4500,月:“八月”},
{num:3500,月:“八月”},
{num:5000,月:“一月”},
{num:6000,月份:“二月”}

]
使用
减少

const输入=[
{num:5000,月:“九月”},
{num:6000,月:“九月”},
{num:4500,月:“八月”},
{num:3500,月:“八月”},
{num:5000,月:“一月”},
{num:6000,月份:“二月”}
];
const output=Object.values(input.reduce((a,{num,month})=>{
如果(!a[month])a[month]={num,month};
else{a[month].num+=num;}
返回a;
}, {}));

控制台日志(输出)使用
reduce
进行初始缩小,然后将其转换回原始形状

可以将其合并为一个步骤,但发现它更容易理解为两个单独的步骤

const月=[{
总数:5000,
月份:“9月”
},
{
总数:6000,
月份:“9月”
},
{
总数:4500,
月份:“八月”
},
{
总数:3500,
月份:“八月”
},
{
总数:5000,
月份:“一月”
},
{
总数:6000,
月份:“二月”
}
]
减少的常数=个月。减少((结果,个月)=>{
如果(结果[月份]){
结果[月份]+=month.num
}否则{
结果[月份]=month.num
}
返回结果;
}, {})
const results=Object.keys(reduced.map)(key=>({
月份:关键,
num:减少的[关键点]
}))

console.log(results)
您可以
将数组减少为
对象
,将
月份
作为
数值
作为
,然后
映射
对象。条目
到所需数组:

const arr=[
{num:5000,月:“九月”},
{num:6000,月:“九月”},
{num:4500,月:“八月”},
{num:3500,月:“八月”},
{num:5000,月:“一月”},
{num:6000,月份:“二月”}
];
const reduced=arr.reduce((acc,{num,month})=>{
acc[月]=(acc[月]| 0)+num;
返回acc;
}, {});
const result=Object.entries(reduced.map)([month,num])=>({num,month}));
控制台日志(结果)

您可以使用此函数。

是否也可以添加出现次数??比如[{“num”:11000,“月”:“九月”,计数:2},{“num”:8000,“月”:“八月”,计数:2},{“num”:5000,“月”:“一月”,计数:1},{“num”:6000,“月”:“二月”,计数:1}]
var container = [
{num: 5000, month: "September"},
{num: 6000, month: "September"},
{num: 4500, month: "August"},
{num: 3500, month: "August"},
{num: 5000, month: "jan"},
{num: 6000, month: "feb"}
];

let result = container.reduce((acc, c) => {
    let index = acc.findIndex((v) => v.month === c.month);
    index > -1 ? acc[index].num += c.num : acc.push(c);
    return acc;
}, []);
console.log(result);