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

JavaScript数组指定数值求和问题:代码结果与预期不符

问题排查与正确求和方法

嘿,我一眼就发现你代码里的问题啦!

核心错误原因

你在循环里写的data.y[i]是错误的访问方式:

  • data是一个对象数组,每个元素是包含y属性的对象
  • 你需要先通过data[i]获取数组中第i个对象,再访问它的y属性,也就是data[i].y
  • 而你当前写的data.y会直接去数组本身找y属性,这显然不存在,结果是undefined;再取undefined[i]还是undefined,虽然理论上0加undefined会得到NaN,但浏览器弹窗可能对NaN做了特殊处理显示为0,这就是你看到结果始终为0的原因。

修正后的循环求和代码

var data = [{ name: 'try1', y: 1756, fontWeight: 'bold', },{ name: 'try2', y: 756, fontWeight: 'bold', },{ name: 'try3', y: 356, fontWeight: 'bold', }]
var dataSum = 0;
for (var i=0;i < data.length;i++) {
  dataSum += data[i].y; // 修正属性访问顺序
}
alert(dataSum); // 现在会正确弹出2868

更简洁的ES6求和方式(推荐)

如果你习惯用更现代的JS写法,reduce函数是处理数组累加的绝佳选择,代码更简洁易读:

var data = [{ name: 'try1', y: 1756, fontWeight: 'bold', },{ name: 'try2', y: 756, fontWeight: 'bold', },{ name: 'try3', y: 356, fontWeight: 'bold', }]
var dataSum = data.reduce((total, currentItem) => total + currentItem.y, 0);
alert(dataSum);

这里reduce的第一个参数是回调函数,每次循环把当前对象的y值累加到total里;第二个参数0是累加的初始值,确保第一次循环时total从0开始计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:49:44