JavaScript中JSON.parse解析后遍历对象键取值返回undefined的问题求助
问题核心原因
- 点语法访问属性的规则限制:
对象.属性名的写法中,点后面的内容会被识别为固定字面量的属性名,无法接收动态的键名变量。你代码中循环拿到的item是存储了实际键名的变量,用JSON.parse(data).item取值时,实际是在查找对象上名字叫item的专属属性,这个属性本身不存在,所以输出结果全是undefined。 - 冗余性能消耗:代码在map循环的每一次迭代中,都重复执行一次
JSON.parse(data)对同一段字符串做解析,存在不必要的性能浪费。
修复实现步骤
- 仅对JSON字符串做一次解析,将结果存为独立的对象变量,避免重复计算
- 动态获取属性值时,替换为方括号属性访问语法,该语法支持将变量中存储的字符串作为属性名匹配对应值
修正后的可运行代码:
let data = "{\"id\":14133,\"taskType\":\"viewing\",\"propertyId\":479,\"userId\":640,\"subject\":\"Viewing with Arsalan Ahmed at Bahria Town Phase 2\",\"date\":\"2021-02-18T18:44:00.000Z\"}"; const parsedObj = JSON.parse(data); Object.keys(parsedObj).map(item => console.log(parsedObj[item], item))
补充说明:如果只是单纯遍历做打印操作,没有基于遍历结果生成新数组的需求,将
map替换为forEach会更符合语义,二者此处的运行结果一致。
内容的提问来源于stack exchange,提问作者Shopify Guy
相关产品推荐
相关产品推荐

