使用Lodash按日期分组对购物车嵌套cart_add_ons字段求和问题求解
问题定位
- 核心错误:
cart_add_ons是存储附加项的数组,本身不存在mobile_price属性,你直接访问o.cart_add_ons.mobile_price得到的是undefined,转换为Number后是NaN,最终累加结果就会变成null/NaN,不符合预期。 - 次要逻辑漏洞:JS中空数组
[]属于真值,你现有o.cart_add_ons ? ... : 0的判断对空附加项的商品也会进入求和分支,不会返回0,进一步导致结果错误。
修正代码
你原有代码的整体框架是正确的,只需调整total_add_on的求和逻辑:先对单个商品的所有附加项求和,再汇总所有商品的附加项总和即可。如果需要按实际购买数量计算总金额,可以加上商品quantity字段的乘法逻辑,修正后代码如下:
result = _.chain(cart_items) .groupBy('date') .map((value, key) => ({ date: key, // 若不需要按购买数量算总价,去掉 * item.quantity 即可匹配你原有逻辑 total_amount: _.sumBy(value, item => Number(item.mobile_price) * item.quantity), total_add_on: _.sumBy(value, item => { // _.sumBy对空数组会直接返回0,无需额外判断空值 const singleItemAddonSum = _.sumBy(item.cart_add_ons, addon => Number(addon.mobile_price)); // 同样如果不需要按购买数量算总价,去掉 * item.quantity 即可 return singleItemAddonSum * item.quantity; }), item_data: value, })) .sortBy('date') .value();
内容的提问来源于stack exchange,提问作者yasnil
相关产品推荐
相关产品推荐

