2015-04-08 37 views
2

有一個嵌套的對象這樣的:如何打印嵌套對象的所有值

var conversation = { 
    'John': { 
     1: 'Test message 1', 
     2: 'Test message 2', 
     'Reply': { 
      3: 'Test message 3', 
      4: 'Test message 4' 
     } 
    }, 
    'Jack': { 
     5: 'Test message 5', 
     6: 'Test message 6' 
    } 
}; 

我需要讓所有的最終值,所以這個例子中,它是:

Test message 1 
Test message 2 
Test message 3 
Test message 4 
Test message 5 
Test message 6 

如何迭代對象? jQuery或JavaScript中是否有內置函數?

+0

的[動態顯示JSON文件內容]可能重複(http://stackoverflow.com/questions/29478005/dynamically-display-json-file-contents) – renakre

+4

你可以使用你可以使用你可以使用遞歸遞歸遞歸。 –

回答

15

你可以使用一些遞歸來檢查,看看是否在其上迭代的關鍵是一個對象或沒有,然後打印:

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

printValues(conversation); 

演示:http://jsfiddle.net/c7th1t8r/

+0

如果你只是想打印,你不會只使用'JSON.stringify()'? –

+4

@JuanMendes - 你爲什麼要用它來打印?這將把對象串聯起來......我認爲OP需要每個鍵的值。 – tymeJV

+0

如果你想使它更短,用'(obj [key] .constructor === Object)替換'if'和'else'語句? printValues(obj [key]):console.log(obj [key]);'我將它改爲'.constructor === Object',因爲'typeof []'也返回'object' –

3

jQuery的有each功能,你可以使用,除了一點遞歸之外,還可以直接進入你的對象,直到你到達可以打印的東西。

var conversation = { 
 
    'John': { 
 
    1: 'Test message 1', 
 
    2: 'Test message 2', 
 
    'Reply': { 
 
     3: 'Test message 3', 
 
     4: 'Test message 4' 
 
    } 
 
    }, 
 
    'Jack': { 
 
    5: 'Test message 5', 
 
    6: 'Test message 6' 
 
    } 
 
}; 
 

 
function iterate(obj) { 
 
    if (typeof obj === 'string') { 
 
    $('#log').append((obj + '<br/>')); 
 
    } 
 
    if (typeof obj === 'object') { 
 
    $.each(obj, function(key, value) { 
 
     iterate(value); 
 
    }); 
 
    } 
 
} 
 

 
iterate(conversation);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="log"></div>

+0

我剛剛注意到並修復了它! –

+0

感謝jQuery解決方案。我認爲這是tymeJV答案的jQuery版本。 – mrdaliri