嵌套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
相关产品推荐
相关产品推荐

