Javascript对象月对应值计算
要获取每个重复月份的num总数,并将唯一月份的值保留在此对象数组中的状态吗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: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);