首页 > 解决方案 > 使用循环访问 typeScript 中的嵌套对象

问题描述

我有一个 json 文件,其中包含 json 对象,如下所示。

 {
  "RegionNames" : ["Region1", "Region2"],
  "StageNames" : ["Stage1", "Stage2"],
  "stages" : {
     "Stage1" : {
         "Region1" : {
            "var1": "value1",
            "var2": "value2"  
         },
         "Region2" : {
            "var1": "value1",
            "var2": "value2"
         }
      },
     "Stage2" : {
         "Region2" : {
            "var1": "value1";,
            "var2": "value2";
          }
      }
   }
}

我想在每个阶段访问 Region1 和 Region2 的 var1 和 var2 这个变量。

//我如何尝试在另一个 typeScript 文件中访问它们,上面的内容在 jsonContent.json 中:-

const stages =jsonContent.StageNames;
const regions = jsonContent.RegionNames;

for (let stageIndex in stages) {
    for (let regionIndex in regions) {
        console.log("Variable1 value :"+ jsonContent.stages[stageIndex].regions[regionIndex].var1)
        console.log("Variable2 value :"+
jsonContent.stages[stageIndex].regions[regionIndex].var2)
    }
}

有人可以帮助我使用循环在 json 中进行访问。

我需要使用“RegionNames”和“StageNames”变量来运行该循环,但不能这样做。有人可以帮忙吗。

标签: javascriptarraystypescriptloops

解决方案


您可以Object.entries()在任何对象上使用方法并将其转换为数组,然后使用循环来访问道具及其值......此外,我不得不使用forEach循环,因为您的对象并不理想(意思是说它包含类似 item1 而不是 item 的东西) ..

let jsonContent = {
  "RegionNames": ["Region1",
    "Region2"],
  "StageNames": ["Stage1",
    "Stage2"],
  "stages": {
    "Stage1": {
      "Region1": {
        "var1": "value1",
        "var2": "value2"
      }
    },
    "Stage2": {
      "Region2": {
        "var1": "value1",
        "var2": "value2"
      }
    }
  }
};

const array = [];
Object.entries(jsonContent.stages).forEach(entry=> array.push(entry[1]));
array.forEach((item, index)=>{
    index++;
    const region = 'Region'+ index;
    const object = item[region];
    // console.log(object)
    console.log("Variable1 value :"+ object.var1);
    console.log("Variable2 value :"+ object.var2);
});

注意:你不应该在像 item1 这样的对象中使用索引,因为在相同数据结构的对象中,建议以简单的方式存储数据,而不是使用带有...的索引。


推荐阅读