如何通过键名访问数组中对象的值?已尝试多种语法仍失败
解决方法:访问嵌套数组与对象中的值
我帮你拆解下这个数据结构,你之前尝试的x.y/x['y']组合没成功,核心原因是attribute是数组类型,不是键值对对象,没法直接通过name字段的内容来访问对应的value。咱们一步步来操作:
第一步:先明确你的数据结构
先把返回的数据整理成更清晰的代码格式,方便理解层级:
const parseMissionData = { record: [ { alt: 45, attribute: [ {name: "messageCode", value: "10"}, {name: "gpsFix", value: "2"}, {name: "autonomous", value: "0"}, {name: "lowBattery", value: "1"} // 你没写完的剩余元素不影响核心逻辑 ] } ], code: 1 };
第二步:访问基础层级的值
比如要拿到alt或者code,直接用你熟悉的点语法/方括号语法即可:
- 获取
code的值:parseMissionData.code或parseMissionData['code'] - 获取
record数组第一个元素的alt值:parseMissionData.record[0].alt或parseMissionData['record'][0]['alt']
第三步:访问attribute数组中的目标值
因为attribute是数组,每个元素是{name:..., value:...}的对象,所以需要先找到对应name的元素,再取value:
方式1:直接查找单个值
用数组的find()方法定位目标元素,再链式访问value(加上可选链?.避免找不到元素时报错):
// 获取messageCode对应的value const messageCode = parseMissionData.record[0].attribute.find(item => item.name === 'messageCode')?.value; // 获取lowBattery对应的value const lowBattery = parseMissionData.record[0].attribute.find(item => item.name === 'lowBattery')?.value;
方式2:转成键值对对象(更方便后续多次访问)
如果需要多次访问attribute里的值,可以先把数组转成普通对象,之后就能直接用键名访问了:
// 将attribute数组转换为键值对对象 const attributeObj = Object.fromEntries( parseMissionData.record[0].attribute.map(item => [item.name, item.value]) ); // 之后直接用点语法访问即可 console.log(attributeObj.messageCode); // 输出 "10" console.log(attributeObj.gpsFix); // 输出 "2" console.log(attributeObj.lowBattery); // 输出 "1"
内容的提问来源于stack exchange,提问作者cpeddie
相关产品推荐
相关产品推荐

