JavaScript中如何动态遍历数组?代码取值为undefined该如何解决?
问题原因分析
- 关键字使用错误:JS中不存在
int关键字,循环变量声明应该用var/let;同时变量声明的Var存在大小写错误,JS大小写敏感,必须使用小写的var/let。 - 属性访问方式错误:使用点语法访问动态属性名时,会直接将
.后的标识符当作固定属性名,而非解析为对应参数的值。你当前的写法实际是在取数组元素中名为objectId、objectValue的属性,而非参数传入的deptId、deptValue属性,这是返回undefined的核心原因。 - 作用域问题:当前你在for循环内部声明的变量,外部无法直接访问,如果需要拿到遍历后的结果,需要在循环外部声明变量存储或者直接返回对应值。
修复后的代码
// 函数调用 validateJsonArray(deptJson, "deptId", "deptValue"); function validateJsonArray(inputArray, objectId, objectValue){ // 如需存储所有遍历结果可提前声明数组 const result = [] for(let i=0; i<inputArray.length; i++){ // 动态属性必须使用方括号语法访问 const selectedObjectId = inputArray[i][objectId]; const selectedObjectValue = inputArray[i][objectValue]; // 示例:将结果存入数组,可替换为自身业务逻辑 result.push({ id: selectedObjectId, value: selectedObjectValue }) console.log(selectedObjectId, selectedObjectValue) } // 外部需要使用结果时直接返回即可 return result }
额外优化建议
现代JS环境下可以直接用forEach遍历,代码更简洁:
function validateJsonArray(inputArray, objectId, objectValue){ inputArray.forEach(item => { const selectedObjectId = item[objectId] const selectedObjectValue = item[objectValue] // 写入业务逻辑即可 }) }
内容的提问来源于stack exchange,提问作者jt3
相关产品推荐
相关产品推荐

