javascript - 在reduce函数中的数组内创建子数组
问题描述
我在这里有一个多级对象,我只是想在日期级别为skus
. 基本上,我现在拥有的是:
name {
date {
reps
sets
}
total
}
但我需要一个在日期级别创建新的 skus 数组的结构,如下所示:
name {
date {
reps
sets
skus {
123 {
}
234 {
}
}
}
total
}
我在这里做错了什么?
const res = [
{name: "bob",sku: 123, reps: 2, sets: 2, date: '2020/03/03' },
{name: "bob", sku: 234, reps: 15, sets: 2, date: '2020/03/03' },
{name: "bob", sku: 345, reps: 26, sets: 5, date: '2020/03/05' },
{name: "bob", sku: 456, reps: 11, sets: 8, date: '2020/03/06' }
]
const dataMap = res.reduce((r, o) => {
r[o.name] ??= {}
r[o.name][o.date] ??= {sets: 0, reps: 0, total: 0, skus:[]}
r[o.name][o.date].sets += +o.sets
r[o.name][o.date].reps += +o.reps
r[o.name][o.date].skus.push(o.sku)
r[o.name][o.date][o.sku] ??= {}
r[o.name].total ??= 0
r[o.name].total += (+o.sets * +o.reps)
return r
}, {});
document.body.innerHTML = "<pre>" + JSON.stringify(dataMap, null, 4) + "</pre>";
解决方案
推荐阅读
- java - 我的菜单栏不在我的窗口顶部?
- reactjs - React Native 不显示图像
- python - 将 datetime.now() 添加到 print_exc
- arrays - 如何正确编写返回给定数组的方法
- python - 无法使用 python api 修改 MT5 中的止损
- android - Android Kotlin - 将 HTML 字符串拆分为保持 HTML 标签的块
- mysql - 如何使用 MySQL 过滤所需的行
- google-apps-script - Google 应用程序脚本变量声明灰显
- javascript - FancyTree 区分拖动到节点和节点下
- typescript - Babel 有错误的命名空间转译