首页 > 解决方案 > 在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>";

标签: javascriptreduce

解决方案


推荐阅读