2016-11-01 166 views
0

作爲練習,我試圖學習如何打印JS對象的鍵和值。我很難過。無法遍歷JavaScript對象

下面是一個基本的對象我寫信,想剛打印出來的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 

如前所述,版本1和版本2打印相同的輸出如下:

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 

我使用Visual Studio Code VERSION 3獲得斷點。

請幫我做出如下輸出:

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

我不想擁有數字鍵,特別是那些重複自己的鍵。我讀過的其他文章似乎沒有任何意義。關於迭代和打印對象鍵和值,Python看起來非常簡單。

謝謝!

回答

3

您使用兩個嵌套的循環,當一個人就足夠了:

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

你的第二個循環,可以枚舉所有對「鍵:值」你的對象的每個值內。對於字符串「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

謝謝你打破下來嗎 –

1

第三次嘗試是有希望的,但錯誤的實施。爲了得到所需的輸出,你可以使用

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

不'forEach'跳過有自己的屬性,如'obTest.hasOwnProperty'對象。如果不是,因爲我喜歡代碼簡潔,我該如何將其添加到此? –

+0

'forEach'只是一個迭代數組的函數。 –

+1

我已經更新了只打印自己的財產的答案。 –

1

只需使用從MDN Docs

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

一個問題的例子是,你缺少你的「網站」 - 屬性的值後面的"

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