You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在嵌套数组对象中获取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' }

代码解释

  1. Array.find():遍历VOYAGES下的数组元素,找到第一个符合条件的对象就停止遍历,效率较高
  2. Object.keys(item).includes(targetRegion):检查当前对象的键是否包含目标region字符串,确保精准匹配
  3. 容错处理:如果没有找到匹配的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:34:25