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

React中reduce方法仅计算前两值返回NaN问题排查

问题分析与修复

核心错误1:reduce用法完全错误

你在reduce回调里直接返回<Text>组件,这会导致:

  • 第一次迭代时,previousValue是数组第一个元素的计算值,和currentValue相加后返回<Text>组件
  • 第二次迭代时,previousValue变成了<Text>对象,用Number()转换会得到NaN,后续所有计算都会变成NaN

核心错误2:可能存在索引越界

map的索引j基于data[zone][product]的长度,但你用它取dt.order_list[0].order_list_products[j],如果order_list_products的长度比data[zone][product]短,就会取到undefined,mix_percentage为undefined时计算结果就是NaN,直接污染整个累加过程。

修复后的代码

{(() => {
  // 先完成数值累加,再渲染组件
  const total = data[zone][product]
    .map((dt, j) => {
      // 先判断是否存在对应的order_list_products项,避免取undefined
      const productItem = dt.order_list[0]?.order_list_products[j];
      if (!productItem || isNaN(productItem.mix_percentage) || isNaN(dt.tons_ordered)) {
        return 0; // 无效值直接返回0,不影响求和
      }
      return (productItem.mix_percentage / 100) * dt.tons_ordered;
    })
    .reduce((prev, curr) => prev + curr, 0); // reduce只做数值累加,初始值设为0

  return <Text style={styles.tr}>{total}</Text>;
})()}

关键修复点

  • 把数值计算和组件渲染分开,先用reduce算出总和,再把总和放到<Text>里
  • 添加可选链?.和空值判断,避免因索引越界或数值无效导致的NaN
  • 给reduce设置初始值0,确保空数组时也能返回0而不是报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:25:35