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
相关产品推荐
相关产品推荐

