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

JavaScript嵌套数组对半分组求和出现push未定义报错如何解决

问题修复方案

错误原因梳理

  • 入参data是外层包裹的数组,实际业务对象在data[0]位置,直接访问data.key/data.values会得到undefined
  • 你定义的temp是数组类型,直接访问temp.values属于undefined属性,需要先取temp[0]才能访问内部的values字段
  • 循环逻辑错误:你从i=1开始每次步长为1遍历,不仅会重复计算相邻项,还会访问temp.values[i]这个不存在的元素,调用push自然就触发报错
  • 字段大小写不匹配:原数据中分组键是大写Key,代码中写的小写key会导致字段丢失

修复后代码

var data = [{"Key":1,"values":[
{"LastOnline":"21-11-28","Value":1},
{"LastOnline":"21-11-29","Value":1},
{"LastOnline":"21-11-30","Value":1},
{"LastOnline":"21-12-01","Value":1},
{"LastOnline":"21-12-02","Value":1},
{"LastOnline":"21-12-03","Value":1},
]}];

function halveMonth(data){
  // 先取出外层数组里的实际业务对象
  const source = data[0];
  const result = [{
    Key: source.Key,
    values: []
  }];
  // 步长设为2,每次处理两个元素
  for(let i = 0; i < source.values.length; i += 2) {
    // 处理最后可能剩单个的边界情况
    const nextItem = source.values[i+1] || {Value: 0};
    result[0].values.push({
      // 取每组后一个的日期作为合并后的日期,和你给出的示例输出匹配
      LastOnline: nextItem.LastOnline || source.values[i].LastOnline,
      Value: source.values[i].Value + nextItem.Value
    })
  }
  return result;
}

console.log(halveMonth(data));

输出结果

运行后得到的输出和你给出的期望结构完全一致:

[
  {
    Key: 1,
    values: [
      { LastOnline: '21-11-29', Value: 2 },
      { LastOnline: '21-12-01', Value: 2 },
      { LastOnline: '21-12-03', Value: 2 }
    ]
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:06:02