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

jQuery遍历ajax返回JSON数组分组计算得到NaN如何处理

问题根因

  • 接口返回的每条数据按类型拆分存储:类型为verkocht的条目仅包含sum_verkocht字段,类型为bezoeken的条目仅包含sum_bezoeken字段,直接遍历单条数据计算时,两个求和字段必然有一个不存在,parseInt后得到NaN,最终运算结果为NaN
  • 同时还存在sum_verkocht为0的场景,未做兼容处理会导致运算结果为无穷大,不符合展示要求

修复后的代码

$.ajax({
  type: 'POST',
  url: 'assets/ajax/get-results.php',
  dataType: 'json',
  cache: false,
  data: {}, 
  success: function (data) {
    // 定义分组存储对象,键为 月份_年份_邮编,值为对应的两个求和值
    const groupMap = {}
    data.forEach(item => {
      const key = `${item.month}_${item.year}_${item.postal}`
      // 初始化分组
      if(!groupMap[key]) {
        groupMap[key] = {
          sum_bezoeken: 0,
          sum_verkocht: 0
        }
      }
      // 按类型赋值
      if(item.type === 'bezoeken') {
        groupMap[key].sum_bezoeken = parseInt(item.sum_bezoeken) || 0
      } else if(item.type === 'verkocht') {
        groupMap[key].sum_verkocht = parseInt(item.sum_verkocht) || 0
      }
    })

    // 遍历分组计算结果并填充DOM
    Object.keys(groupMap).forEach(key => {
      const {sum_bezoeken, sum_verkocht} = groupMap[key]
      let result = 0
      // 除数不为0时才计算
      if(sum_verkocht !== 0) {
        // 可按需调整小数保留位数,示例为保留2位
        result = (sum_bezoeken / sum_verkocht).toFixed(2)
      } else {
        // 销量为0时可自定义展示内容,示例为显示横杠
        result = '-'
      }
      $(`.gem_${key}`).html(result)
    })
  }
});

逻辑说明

  1. 先遍历所有接口返回数据,以月份_年份_邮编为唯一键,把同分组的访问量、销量汇总存储到对象中
  2. 遍历汇总后的分组对象,判断销量不为0时才做除法运算,避免出现无穷大或者NaN
  3. 可根据业务需求调整小数保留位数,或者销量为0时的展示内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:54:03