JavaScript循环访问JSON动态属性实现批量取值的解决方法
错误原因定位
你代码的逻辑问题出在JS动态属性的访问规则上:
// 错误的取值写法 data.setValue(i, 1, Respuesta[0].column[i]);
这行代码的实际运行逻辑是:尝试读取Respuesta[0]对象中名为column的属性,再取这个属性的第i个值。但你的column是独立定义的数组,Respuesta[0]本身根本不存在column这个键,因此最终永远无法取到目标值,只会返回undefined。
修正方案
column[i]本质是对应属性名的字符串,JS支持用方括号语法读取动态属性名,只要把属性名传入方括号即可,修正后的循环代码如下:
// 注:你原来定义的column数组存在重复day5的笔误,可按顺序修正 var column = ["day0", "day1", "day2", "day3", "day4", "day5", "day6", "day7", "day8", "day9", "day10", "day11", "day12", "day13", "day14", "day15"]; for (i = 0; i < 5; i++) { // 用方括号语法传入动态属性名,即可正确取值 data.setValue(i, 1, Respuesta[0][column[i]]); }
优化写法(减少硬编码)
如果后续JSON返回的键始终按day0、day1的顺序排列,完全可以不用手动写死列名数组和循环次数,直接从返回的JSON结构中提取键名即可,降低后续维护成本:
var Respuesta = jQuery.parseJSON(JSON); // 直接从返回对象中提取所有键名作为列名列表 var column = Object.keys(Respuesta[0]); // 自动遍历所有返回的日期字段,无需手动指定循环长度 for (i = 0; i < column.length; i++) { data.setValue(i, 1, Respuesta[0][column[i]]); }
内容的提问来源于stack exchange,提问作者Elhannaoui
相关产品推荐
相关产品推荐

