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

嵌套reduce函数处理对象数组的数组时无法正常工作

问题分析与解决:计算指定商品总销量的reduce函数错误

你的代码核心问题是运算符优先级导致逻辑错误:三元运算符?:的优先级低于加法+,所以内层reduce的返回语句会被错误解析。

原代码中:

return prevItem + (currItem.name === type) ? currItem.quantity : 0;

实际执行顺序是先计算prevItem + (currItem.name === type)(布尔值会被转成1或0),再根据这个结果的真假返回currItem.quantity或0,完全偏离了“匹配商品则累加数量”的逻辑。

修正后的代码

只需要把三元运算的结果用括号包裹,确保先完成判断再执行加法:

const order_1 = [
  { name: "1", quantity: 1 },
  { name: "2", quantity: 3 },
];
const order_2 = [
  { name: "3", quantity: 1 },
  { name: "1", quantity: 2 },
];
const order_3 = [
  { name: "4", quantity: 1 },
  { name: "2", quantity: 1 },
];
const order_4 = [
  { name: "2", quantity: 2 },
  { name: "1", quantity: 1 },
];
const orders = [order_1, order_2, order_3, order_4];

function getTotalQuantity(type) {
  return orders.reduce((prevOrder, currOrder) => {
    return prevOrder + currOrder.reduce((prevItem, currItem) => {
      // 用括号包裹三元运算结果,确保优先级正确
      return prevItem + (currItem.name === type ? currItem.quantity : 0);
    }, 0);
  }, 0);
}
console.log("1: " + getTotalQuantity("1")); // 输出 1: 4
console.log("2: " + getTotalQuantity("2")); // 输出 2: 6
console.log("3: " + getTotalQuantity("3")); // 输出 3: 1
console.log("4: " + getTotalQuantity("4")); // 输出 4: 1

验证结果

修正后运行代码,会得到正确的总销量:

  • 商品1总销量:1+2+1=4
  • 商品2总销量:3+1+2=6
  • 商品3总销量:1
  • 商品4总销量:1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:06:28