检查相似的密钥对,然后使用reduce动态求和



所以基本上我需要生成一个图表,我有以下数据

[
{
"indessx": "1",
"type": "A",
"number": "260",
"month": "May",
"date": "01/05/20"
},
{
"indessx": "2",
"type": "A",
"number": "320",
"month": "May",
"date": "02/05/20"
},
{
"indessx": "2",
"type": "A",
"number": "320",
"month": "June",
"date": "02/06/20"
},
]

现在,我需要使用上面的数据显示一个图表,但我得到的响应有多个类似的月份值,如上面片段中的May。现在我用reduce来得到一个特定月份的数字总和,所以就像梅一样,一个新的对象将被生成,数字加起来为260+320

所以数组的新对象将是这样的。。

[
{
"indessx": "1",
"type": "A",
"number": "580", // value after addition
"month": "May",
},        
{
"indessx": "2",
"type": "A",
"number": "320",
"month": "June",
"date": "02/06/20"
},
]

我试着用reduce来做这个,但坚持添加一个检查,看看这个月是否相等,然后只添加它。

您可以使用以下函数。作为输入,使用您在开始时提供的初始数据。作为输出,它返回您所要求的数组。

const getNewData = function(data) {
let indessx = 1, newData = [];
data.forEach(el => {
if(newData.findIndex(element => element.month == el.month) != -1) {
let curElement = newData[newData.findIndex(element => element.month == el.month)];
curElement.number = (parseInt(curElement.number) + parseInt(el.number)).toString();
delete curElement.date;
} else {
let newEl = el;
newEl.indessx = indessx;
newData.push(newEl);
indessx++;
};
});
return newData;
};

最新更新