无法访问转换后数组对应的JSON属性,求问题排查
问题排查与解决
你的核心问题是错误地将键值对拆分成了数组中的多个独立对象,导致无法通过属性名直接访问对应值:
- 执行代码后,
array的结构是[{Speed: "145"}, {Deceleration: "76.5"}],本质是数组而非单一对象 - 数组没有
Speed这类属性,所以不管是直接访问array.Speed,还是转成JSON字符串再解析后访问js.Speed,都会返回undefined
正确实现方式
应该把所有metric和value合并到同一个对象中,推荐用reduce方法构建目标对象:
var response=[ { metric: "Speed", value: "145", }, { metric: "Deceleration", value: "76.5", } ]; // 用reduce构建包含所有键值对的单一对象 const metricObj = response.reduce((acc, item) => { acc[item.metric] = item.value; return acc; }, {}); // 直接访问属性 console.log(metricObj.Speed); // 输出 "145" console.log(metricObj.Deceleration); // 输出 "76.5" // 若需JSON转换后访问 const j = JSON.stringify(metricObj); const js = JSON.parse(j); console.log(js.Speed); // 同样输出 "145"
补充说明
你之前误用了map方法:map的设计目的是返回一个新数组,而非用来执行push这类副作用操作。如果一定要用遍历方式,改用forEach会更合理,但reduce是构建这类键值对对象最简洁的方案。
内容的提问来源于stack exchange,提问作者user20330985
相关产品推荐
相关产品推荐

