You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何直接从原数组生成按周聚合的指定结构新数组?

问题描述

我有如下数组:

var firstjson = [
                 {
                  "Week"    : "Week 1",
                  "Product" : "Apple",
                  "Buy"     : "24",
                  "Sell"    : "20",
                  "Profit"  : "100",
                  "Lost"    : "20"
                 },
                 {
                  "Week"    : "Week 1",
                  "Product" : "Egg",
                  "Buy"     : "24",
                  "Sell"    : "20",
                  "Profit"  : "100",
                  "Lost"    : "20"
                 },
                 {
                  "Week"    : "Week 2",
                  "Product" : "Apple",
                  "Buy"     : "44",
                  "Sell"    : "10",
                  "Profit"  : "10",
                  "Lost"    : "200"
                 },
                 {
                  "Week"    : "Week 2",
                  "Product" : "Milk",
                  "Buy"     : "24",
                  "Sell"    : "20",
                  "Profit"  : "100",
                  "Lost"    : "20"
                 }
                ]

希望将其转换为如下结构的数组:

var finalarray = [
                  {
                   "Week"    : "Week 1",
                   "Apple_Buy" : "24",
                   "Apple_Sell" : "20",
                   "Apple_Profit" : "100",
                   "Apple_Lost" : "20",
                   "Egg_Buy" : "24",
                   "Egg_Sell" : "20",
                   "Egg_Profit" : "100",
                   "Egg_Lost" : "20"
                  },
                  {
                   "Week"    : "Week 2",
                   "Apple_Buy" : "44",
                   "Apple_Sell" : "10",
                   "Apple_Profit" : "10",
                   "Apple_Lost" : "200",
                   "Milk_Buy" : "24",
                   "Milk_Sell" : "20",
                   "Milk_Profit" : "100",
                   "Milk_Lost" : "20"
                  },
                 ]

我尝试过先提取周列表再循环的方法,但后续无法继续推进,想请教是否有无需提取周列表,直接遍历原数组生成目标数组的简洁实现方式?

解决方案

可以使用JavaScript的reduce方法直接遍历原数组,通过一个对象按Week分组,最后将分组结果转为数组即可,无需提前提取周列表:

const finalarray = Object.values(firstjson.reduce((acc, item) => {
  // 以Week作为分组的标识key
  const weekKey = item.Week;
  // 若当前周未在累加器中,初始化基础对象
  if (!acc[weekKey]) {
    acc[weekKey] = { Week: weekKey };
  }
  // 解构出不需要拼接的字段,遍历剩余字段进行格式转换
  const { Week, Product, ...rest } = item;
  for (const [key, value] of Object.entries(rest)) {
    acc[weekKey][`${Product}_${key}`] = value;
  }
  return acc;
}, {}));

console.log(finalarray);

代码说明

  • reduce遍历原数组,用累加器对象acc按Week值分组存储数据
  • 每个元素处理时,先判断当前Week是否已存在,不存在则初始化包含Week字段的对象
  • 解构拆分出Week、Product和其余业务字段,将业务字段以产品名_字段名的格式作为新键,添加到对应Week的对象中
  • 最后通过Object.values将累加器的对象值转为目标数组格式

内容的提问来源于stack exchange,提问作者kanishka kumarasiri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:55:30