javascript - 通过 reduce 修改对象数组
问题描述
我有一个像->这样的数组
[{amount: 5000, date: "2020-04", user: "Bill Gates"}, {amount: 5000, date: "2020-04", user: "Jon Jones"}, {amount: 5000, date: "2020-05", user: "Jon Jones"}, {amount: 5000, date: "2020-05", user: "Bill Gates"}, ...]
我想将其修改为 ->
[{user: "Bill Gates", data: [{amount: 5000, date: "2020-04"}, {amount: 5000, date: "2020-05"}]}, {user: "Jon Jones", data: [{amount: 5000, date: "2020-04"}, {amount: 5000, date: "2020-05"}]}, ....]
我写reduce函数->
let reduced = array.reduce((sells, {user, date, amount}) => ({
...sells,
user: user,
data: [{date: date, amount: amount}],
}),{});
但它只返回一项数组。我怎样才能将它们全部归还?
解决方案
您可以使用 if found 搜索用户Array.prototype.find
,这意味着它已被处理,您可以将数据对象推送到现有数组中,否则创建一个新对象并将其插入累加器中:
const data = [{amount: 5000, date: "2020-04", user: "Bill Gates"}, {amount: 5000, date: "2020-04", user: "Jon Jones"}, {amount: 5000, date: "2020-05", user: "Jon Jones"}, {amount: 5000, date: "2020-05", user: "Bill Gates"}];
const result = data.reduce((sells, {user, date, amount}) => {
let match = sells.find(e => e.user === user);
if(match){
match.data.push({amount, date});
}else{
match = {user, data : [{amount, date}]};
sells.push(match);
}
return sells;
}, []);
console.log(result);
推荐阅读
- java - 尝试使用提供的代码读取 Excel 文件时出现 Class Not Found 错误
- regex - NGINX - 到locations.conf的正则表达式不起作用
- javascript - 使用wordpress中的自定义代码更新数据后的页面重定向
- python - 查找我出现最多的特殊字符
- asp.net-mvc - 相同 EF 模型(数据库)的不同数据库上下文?
- rust - 如何延长结构的生命周期,以便可以使用它调用 tokio::run?
- javascript - 在 Javascript 中计算百分比。
- java - 从控制器调用时出现 java.lang.NullPointerException
- javascript - 独立于页面缩放级别和 Windows 缩放设置检测屏幕分辨率
- angular - 如何在 Angular 7 中正确使用 compareWith 和响应式表单?