2016-11-01 9 views
0

練習問題として、JSオブジェクトのキーと値を印刷する方法を学びたいと考えています。私は苦労している。JavaScriptオブジェクトを反復できない

0 : J 
1 : o 
2 : h 
3 : n 
0 : 1 
1 : 0 
2 :/
3 : 1 
4 : 8 
5 :/
6 : 2 
7 : 0 
8 : 0 
9 : 8 
0 : 2 
0 : w 
1 : w 
2 : w 
3 : . 
4 : s 
5 : a 
6 : m 
7 : p 
8 : l 
9 : e 
10 : w 
11 : e 
12 : b 
13 : s 
14 : i 
15 : t 
16 : e 
17 : . 
18 : c 
19 : o 
20 : m 

Iを次のように

は、以下の、バージョン1とバージョン2のプリントと同じ出力私が書いた基本的なオブジェクトであると指摘したようにちょうどkey : value

var obTest = { 
    name: "John", 
    WeddingDate: "10/18/2008", 
    NumberKids: "2", 
    Website: "www.samplewebsite.com 
}; 


/* VERSION 1 
for (var key in obTest) { 
    // skip loop if the property is from prototype 
    if (!obTest.hasOwnProperty(key)) continue; 

    var obKey = obTest[key]; 
    for (var obProp in obKey) { 
     // skip loop if the obProperty is from prototype 
     if(!obKey.hasOwnProperty(obProp)) continue; 

     // your code 
     alert(obProp + " : " + obKey[obProp]); 
    } 
}; 
    // note: this prints each character as a key:value 
*/ 

/* VERSION 2 
for (var key in obTest) { 
    if (obTest.hasOwnProperty(key)) { 
     var obKey = obTest[key]; 
     for (var prop in obKey) { 
     if (obKey.hasOwnProperty(prop)) { 
      console.log(prop + " : " + obKey[prop]); 
     } 
     } 
    } 
}; 
    // note: this prints each character as a key:value 
*/ 


// VERSION 3 
Object.keys(obTest.forEach(function(key) { 
    console.log(key, obTest[key]); 
})); 
    // note: this gives me a breakpoint and can't figure out why it does not work 

を印刷したいですVisual Studioコードをバージョン3に使用してブレークポイントを取得してください。

name : John 
    WeddingDate : 10/18/2008 
    NumberKids : 2 
    Website : www.samplewebsite.com 

私は数字キー、特に自分自身を繰り返しているものは持ちたくありません。私が読んだ他の記事は意味をなさないようです。 Pythonは、オブジェクトのキーと値を反復して出力することはとても簡単です。

ありがとうございました! 、あなたの第二のループで

for (var key in obTest) { 
    // skip loop if the property is from prototype 
    if (!obTest.hasOwnProperty(key)) continue; 
    //find the object corresponding to the current key 
    var obKey = obTest[key]; 
    //output the key and the corresponding object 
    alert(key + " : " + obKey); 
}; 

を、あなたはすべてのペア「のキー:値」列挙する:

答えて

3

1は十分だろうときには、2つの入れ子ループを使用している、あなたのオブジェクトの各値内部を。文字列 "John"の場合、キー:値は(0: "J"、1: "o"、2: "h"、3: "n")です。

バージョン3では、かっこが間違っている:

Object.keys(obTest) //close parenthesis of keys here 
     .forEach(function(key) { 
     console.log(key, obTest[key]); 
     }); //close only forEach here 
+0

'forEach'は、' obTest.hasOwnProperty'など独自のプロパティを持つオブジェクトをスキップしない私のためにそれを –

1

3番目の試行は有望ですが、間違った実装です。希望の出力を得るには、

function objectString(obj) { 
    var keys = Object.keys(obj); 
    return keys.map(v => v + ": " + obj[v]).join("\n"); 
} 

console.log(objectString(obTest)); 
0

Object.keys(your_object)が使えます。オブジェクトを配列に変換します。ドキュメントを確認するhere

1

オブジェクトのキーのリストを取得するには、Object.keys()を使用します。その後、反復して値を取得します。

var obTest = { 
    name: "John", 
    WeddingDate: "10/18/2008", 
    NumberKids: "2", 
    Website: "www.samplewebsite.com" }; 

Object.keys(obTest).forEach(function(key){   
    if (obTest.hasOwnProperty(key)){ 
     console.log(key + ":" + obTest[key]); 
    } 
}); 
+0

壊してくれてありがとう。そうでない場合は、コードの簡潔さが気に入っているので、これをどのように追加するのですか? –

+0

'forEach'は単なる配列を反復する関数です。 –

+1

私は自分のプロパティを印刷するための答えを更新しました。 –

1

だけMDN Docs

for (var property in obTest) { 
    if(obTest.hasOwnProperty(property)) { 
     console.log(property + ": " + obTest[property]) 
    } 
} 

からの例を使用する問題の一つは、あなたが「ウェブサイト」-propertyの値の後ろに"が欠落していることです。

http://codepen.io/anon/pen/ozKENQ

関連する問題