如何在嵌套数组对象中获取VOYAGES下指定区域的目标值
解决方法:获取VOYAGES模块下指定region的FIABILITE和REACTIVITE数据
你的代码返回undefined的原因很清晰:你试图用indexOf查找字符串'region=AAA',但objKeys里的元素是对象(比如{ 'region=AAA': {...} }),不是字符串,自然匹配不到,最终index会是-1,访问数组的-1索引就会得到undefined。
正确的实现方式
这里推荐使用Array.find()方法精准定位目标对象,代码如下:
const activityName = 'VOYAGES'; // 仅查询VOYAGES模块 const targetRegion = 'region=AAA'; // 目标region const objectifs = { 'VOYAGES': [ { 'region=AAA': { FIABILITE: '75', REACTIVITE: '90' } }, { 'region=BBBB': { FIABILITE: '75', REACTIVITE: '86' } } ], 'ICC': [ { 'region=CSIC': { FIABILITE: '45', REACTIVITE: '80' } } ] }; // 遍历VOYAGES数组,找到包含目标region键的对象 const matchedItem = objectifs[activityName].find(item => { return Object.keys(item).includes(targetRegion); }); // 提取目标数据,未找到则返回null(可按需调整默认值) const targetData = matchedItem ? matchedItem[targetRegion] : null; console.log(targetData); // 输出 { FIABILITE: '75', REACTIVITE: '90' }
代码解释
Array.find():遍历VOYAGES下的数组元素,找到第一个符合条件的对象就停止遍历,效率较高Object.keys(item).includes(targetRegion):检查当前对象的键是否包含目标region字符串,确保精准匹配- 容错处理:如果没有找到匹配的region,返回
null(你也可以改成空对象或者其他默认值)
备选方案:用forEach遍历查找
如果你更习惯用forEach循环,也可以这么写:
let targetData = null; objectifs[activityName].forEach(item => { if (Object.keys(item).includes(targetRegion)) { targetData = item[targetRegion]; } }); console.log(targetData);
内容的提问来源于stack exchange,提问作者infodev
相关产品推荐
相关产品推荐

