循环遍历多维对象

时间:2017-09-14 16:07:26

标签: javascript

我有一个包含多个对象的对象,需要为每个对象中的每个键创建一个循环。

我需要控制台记录这样的内容。

Iron
TIBC
carbon dioxide
Sodium
etc...

这是我到目前为止所尝试的

(function() {
  var blood = {
    "blood": {
      "one": {
        "iron": "Iron",
        "tibc": "TIBC",

      },
      "two": {
        "cd": "Carbon Dioxide",
        "sodium": "Sodium",
        "potassium": "Potassium",
        "chloride": "Chloride",
      },
      "three": {
        "cholesterol": "Cholesterol",
        "dhdl": "Direct HDL",
      },
      "four": {
        "rigg": "Rubella IgG",
        "hbsag": "HBsAg",
        "ahiv": "Anti-HIV 1+2",
        "estrdiol": "Estradiol",
        "fsh": "FSH",
      }
    }
  }

  for (var key in blood) {
    if (blood.hasOwnProperty(key)) {
      var newKey = blood[key]

      for (var key in newKey) {
        if (newKey.hasOwnProperty(key)) {
          //do stuff
          console.log(newKey[key])
        }
      }

    }
  }
})

4 个答案:

答案 0 :(得分:1)

这就是Object.values的用途:

 const result = Object.values( blood.blood ).map(
   obj => Object.values(obj).join("\n")
 ).join("\n");

 console.log( result );

答案 1 :(得分:0)

喜欢这个吗?

您正在使用for循环遍历键,因此通过递归调用相同的for循环并仅在对象的object为字符串时显示输出,我们可以获得所需的输出,如果它type为var blood = { "blood": { "one": { "iron": "Iron", "tibc": "TIBC", }, "two": { "cd": "Carbon Dioxide", "sodium": "Sodium", "potassium": "Potassium", "chloride": "Chloride", }, "three": { "cholesterol": "Cholesterol", "dhdl": "Direct HDL", }, "four": { "rigg": "Rubella IgG", "hbsag": "HBsAg", "ahiv": "Anti-HIV 1+2", "estrdiol": "Estradiol", "fsh": "FSH", } } } function keyGetter(data){ for(key in data){ if(typeof data[key] === typeof ""){ console.log(data[key]); }else{ keyGetter(data[key]); } } } keyGetter(blood);然后再次调用该函数。

{{1}}

答案 2 :(得分:0)

您可以使用以下内容将所有值放入数组中:

let allTypes = [];

Object.values(blood.blood).forEach(v => {
  // we are iterating over "one"..."four"
  allTypes.push(...Object.values(v));
});

console.log(allTypes);

将输出["Iron", "TIBC", "Carbon Dioxide", "Sodium", "Potassium", "Chloride", "Cholesterol", "Direct HDL", "Rubella IgG", "HBsAg", "Anti-HIV 1+2", "Estradiol", "FSH"]

https://jsbin.com/kodolok/edit?js,console

在迭代基本上是关联数组的对象时,

Object.values非常有用。

答案 3 :(得分:0)

我做了一个可以帮助你的递归函数!

var blood = {
        "blood": {
            "one": {
                "iron": "Iron",
                "tibc": "TIBC",

            },
            "two": {
                "cd": "Carbon Dioxide",
                "sodium": "Sodium",
                "potassium": "Potassium",
                "chloride": "Chloride",
            },
            "three": {
                "cholesterol": "Cholesterol",
                "dhdl": "Direct HDL",
            },
            "four": {
                "rigg": "Rubella IgG",
                "hbsag": "HBsAg",
                "ahiv": "Anti-HIV 1+2",
                "estrdiol": "Estradiol",
                "fsh": "FSH",
            }
        }
}

loopThrough(blood)

function loopThrough(obj){
   if(typeof obj == "object"){
     for(var i in obj){
       loopThrough(obj[i]);
     }
   }else{
     console.log(obj)
   }
  
}