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

使用reduce函数时出现filtered.push is not a function错误的技术求助

解决 reduce 报错:Uncaught TypeError: filtered.push is not a function

嘿,我一眼就揪出问题根源啦!你碰到的这个报错,核心原因是调用 reduce 时没传入初始值。

错误原因拆解

当你执行 order.ITEMS.reduce(...) 但不提供第二个参数(初始值)时,reduce 会把数组的第一个元素作为第一次迭代的 filtered 参数——也就是一个 item 对象,而不是空数组。对象根本没有 push 方法,所以控制台直接抛出了类型错误。

修正后的代码

只需要给 reduce 加上初始空数组 [] 作为第二个参数,问题就迎刃而解了:

function payload(order) {
  return {
    OrderId: order.ORDERID,
    Lines: order.ITEMS.reduce(function(filtered, item) {
      if (item.DispatchedNumber != undefined) {
        var newItem = {
          Qty: item.Qty,
          QtyShipped: item.DispatchedNumber
        }
        filtered.push(newItem);
      }
      return filtered;
    }, []) // 关键:添加初始空数组
  }
}

// 测试用例示例
test = payload({
  "ORDERID": 1,
  "ITEMS": [
    { Qty: 5, DispatchedNumber: 3 },
    { Qty: 2 }, // 无DispatchedNumber,会被过滤
    { Qty: 4, DispatchedNumber: 4 }
  ]
});

可选优化方案

如果追求代码可读性,也可以用 filter + map 的组合来实现同样逻辑,代码更直观:

function payload(order) {
  return {
    OrderId: order.ORDERID,
    Lines: order.ITEMS
      .filter(item => item.DispatchedNumber !== undefined)
      .map(item => ({
        Qty: item.Qty,
        QtyShipped: item.DispatchedNumber
      }))
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:21:36