2017-09-14 3 views
0

私は複数のオブジェクトを持つオブジェクトを持っており、各オブジェクト内の各キーのループを作成する必要があります。多次元オブジェクト内のループスルー

このようなログを出力するにはコンソールが必要です。

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]) 
 
     } 
 
     } 
 

 
    } 
 
    } 
 
})

+0

外側のループ内のあなたのコードの再使用の "キー"。 'var'の代わりに' let'を使って変数を宣言した方が、より新しいJavaScript環境で動作するでしょう。 – Pointy

+0

内部ループが変数 'key'を上書きしています – brenjt

+1

あなたはIIFEも実行していません(最後に'() 'を入れてください) – Jamiec

答えて

0

を試してみました何ですか?

forループでキーをループしているので、同じforループを再帰的に呼び出し、オブジェクトのvalueが文字列である場合にのみ出力を表示することで、そのタイプがobject関数を再度呼び出します。

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

console.log(result); 
+0

問題の内容とその修正方法を説明してください。また、スニペットの[整頓]ボタンをクリックします。 – Barmar

+0

私は何が欠けていたか分かります。助けてくれてありがとうございます – user2168066

+0

@ user2168066私の答えをもう一度チェックして再帰を適用し、キーを単独で手に入れることができますか?これはもう少し混乱しますが、 –

1

ザッツ["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基本的に連想配列であるオブジェクトを反復処理するとき、本当に便利です。

0

あなたは以下の配列にすべての値を取得することができます:

let allTypes = []; 

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

console.log(allTypes); 

ウィル出力Object.valuesが何のためにあるのか

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);

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) 
 
    } 
 
    
 
}