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

同ID数值求和异常求助:JS代码出现NaN或字符串拼接问题

解决数组中相同ID对应数值求和问题

问题根源

你的代码存在两个核心问题:

  1. 错误使用数组存储键值对:total_byID被初始化为数组[],但你需要用字符串ID作为键存储总和,数组的设计目标是数字索引的有序集合,用字符串键会导致初始值为undefined,进而引发拼接前缀或NaN问题。
  2. 未初始化累加初始值:首次处理某个ID时,total_byID[id]不存在,值为undefined。直接和字符串拼接会带上undefined前缀;转数字后undefined + 数字会得到NaN(因为undefined转数字结果为NaN,任何运算与NaN结合结果都是NaN)。

修正后的jQuery代码

var myarray = [
    {"a25": "5000"},{"s36": "125"},{"d44": "15"},{"a25": "3500"},{"s36": "25"},{"d44": "164"},{"a25": "4500"},{"s36": "1251"},{"d44": "75"},{"a25": "251"},{"s36": "120"},{"d44": "94"},{"a25": "12515"}
];
// 改用普通对象存储每个ID的总和
var total_byID = {};
$.each(myarray, function(index, item){
    $.each(item, function(id, value){
        // 将字符串值转为整数,第二个参数10指定十进制解析
        const num = parseInt(value, 10);
        // 若ID未在对象中则初始化为0,再累加数值
        total_byID[id] = (total_byID[id] || 0) + num;
    })
})
console.log(total_byID);

原生JS替代方案(无需jQuery)

如果不想依赖jQuery,用原生reduce方法更简洁:

const myarray = [
    {"a25": "5000"},{"s36": "125"},{"d44": "15"},{"a25": "3500"},{"s36": "25"},{"d44": "164"},{"a25": "4500"},{"s36": "1251"},{"d44": "75"},{"a25": "251"},{"s36": "120"},{"d44": "94"},{"a25": "12515"}
];

const total_byID = myarray.reduce((acc, current) => {
    // 取出当前对象的唯一键值对
    const [id, value] = Object.entries(current)[0];
    const num = parseInt(value, 10);
    // 初始化或累加数值
    acc[id] = (acc[id] ?? 0) + num;
    return acc;
}, {});

console.log(total_byID);

运行结果

执行后会得到你期望的数值汇总:

{
  a25: 25766,
  s36: 1521,
  d44: 348
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:07:29