javascript - 尝试实现转换对象数组的 reducer 方法时出错
问题描述
希望你在这次隔离中做得很好,我花了一个半小时试图在这段代码中寻找我的问题,我希望你在这个练习中帮助我,我有这个数组,
[
{
id: "5eb2d53443ba03249056a126",
creationDate: "2020-05-05",
percentage: "3.62%",
quantity: 21,
requestType: "1-Cash Advance",
timePercentage: "0:23:27",
totalCalls: 580,
totalTime: "8:21;00"
},
{
id: "5eb2d53443ba03249056a127",
creationDate: "2020-05-05",
percentage: "57.41%",
quantity: 333,
requestType: "2-Info Request",
timePercentage: "0:47:18",
totalCalls: 580,
totalTime: "262:49;00"
},
{
id: "5eb2d53443ba03249056a126",
creationDate: "2020-05-06",
percentage: "3.62%",
quantity: 21,
requestType: "1-Cash Advance",
timePercentage: "0:23:27",
totalCalls: 580,
totalTime: "8:21;00"
},
{
id: "5eb2d53443ba03249056a127",
creationDate: "2020-05-06",
percentage: "57.41%",
quantity: 333,
requestType: "2-Info Request",
timePercentage: "0:47:18",
totalCalls: 580,
totalTime: "262:49;00"
}
]
这是我的减少实现,
结果是前一个对象数组,
result = Object.values(
result.reduce((object, {creationDate,
requestType, quantity,
totalTime, timePercentage,
percentage, totalCalls
}) => {
if(!object[requestType]) object[requestType] = {
requestType, quantity, totalTime,
timePercentage, percentage, totalCalls
};
if(object[requestType].requestType === requestType){
object[requestType].quantity += quantity;
if(object[requestType].creationDate !== creationDate) object[requestType].totalCalls += totalCalls;
}
return object;
})
)
我期待的是这个
[
{
percentage: "3.62%",
quantity: 42,
requestType: "1-Cash Advance",
timePercentage: "0:46:54",
totalCalls: 1160,
totalTime: "16:42;00"
},
{
percentage: "57.41%",
quantity: 666,
requestType: "2-Info Request",
timePercentage: "01:33:48",
totalCalls: 1160,
totalTime: "525:38:00"
}
]
请不要关心我只想要一个一般想法的花哨部分,我希望我可以自己解决这个问题,但我不喜欢被卡住,所以我会在等待有人帮助我的同时继续努力寻找解决方案我的问题。
谢谢!
解决方案
您需要添加初始值。检查文档
初始值 可选
用作回调第一次调用的第一个参数的值。如果未提供初始值,则数组中的第一个元素将用作初始累加器值并作为 currentValue 跳过。
这是工作代码
let result = [{
id: "5eb2d53443ba03249056a126",
creationDate: "2020-05-05",
percentage: "3.62%",
quantity: 21,
requestType: "1-Cash Advance",
timePercentage: "0:23:27",
totalCalls: 580,
totalTime: "8:21;00"
},
{
id: "5eb2d53443ba03249056a127",
creationDate: "2020-05-05",
percentage: "57.41%",
quantity: 333,
requestType: "2-Info Request",
timePercentage: "0:47:18",
totalCalls: 580,
totalTime: "262:49;00"
},
{
id: "5eb2d53443ba03249056a126",
creationDate: "2020-05-06",
percentage: "3.62%",
quantity: 21,
requestType: "1-Cash Advance",
timePercentage: "0:23:27",
totalCalls: 580,
totalTime: "8:21;00"
},
{
id: "5eb2d53443ba03249056a127",
creationDate: "2020-05-06",
percentage: "57.41%",
quantity: 333,
requestType: "2-Info Request",
timePercentage: "0:47:18",
totalCalls: 580,
totalTime: "262:49;00"
}
];
let aggregatedObject = [];
result = Object.values(result.reduce((aggregatedObject, {
creationDate,
requestType,
quantity,
totalTime,
timePercentage,
percentage,
totalCalls
}) => {
if (!aggregatedObject[requestType]) {
aggregatedObject[requestType] = {
requestType,
quantity,
totalTime,
timePercentage,
percentage,
totalCalls
};
}
if (aggregatedObject[requestType].requestType === requestType) {
aggregatedObject[requestType].quantity += quantity;
if (aggregatedObject[requestType].creationDate !== creationDate) {
aggregatedObject[requestType].totalCalls += totalCalls;
}
}
return aggregatedObject;
}, aggregatedObject));
console.log(result);
推荐阅读
- php - 访问第 2、第 3 级等。来自使用 php 的 json 请求
- c# - 如何破坏 json 对象中的大数据
- scala - scala集成测试“没有这样的设置/任务”
- javascript - 使用变量作为对象键
- javascript - 具有自身功能的速度交错
- python-3.x - 使用 while 和 for 循环进行字符串压缩
- c# - 完成导出后多次显示“保存对话框”窗口
- git - 即使我添加,Git 提交也不起作用,它说“没有为提交暂存更改”
- c - 如何从进程中分离,以便它可以被另一个进程跟踪?
- python - 在 python 中,生成元组的最快方法是什么:(1.0, 0.0, 0.0, 2.0, 0.0, 0.0, ..., N, 0.0, 0.0)?