Javascript 如何打印嵌套对象的所有值

Javascript 如何打印嵌套对象的所有值,javascript,jquery,Javascript,Jquery,有这样一个嵌套对象: 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',

有这样一个嵌套对象:

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中是否有内置函数?

您可以使用一些递归来检查迭代的键是否是对象,然后打印:

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

printValues(conversation);
演示:

jQuery具有您可以使用的功能,此外还有一点递归功能,可以深入到您的对象中,直到达到可以打印的内容

var对话={
约翰:{
1:'测试消息1',
2:'测试消息2',
答复:{
3:'测试消息3',
4:“测试消息4”
}
},
“杰克”:{
5:'测试消息5',
6:“测试消息6”
}
};
函数迭代(obj){
如果(对象的类型=='string'){
$('#log')。追加((obj+'
'); } 如果(对象的类型=='object'){ $。每个(对象、功能(键、值){ 迭代(值); }); } } 重复(对话)
更实用的方式:

const getObjectValues=(obj)=>(obj&&typeof obj==='object')
? Object.values(obj.map(getObjectValues.flat)()
:[obj]
这将返回一个可以打印的数组 :

console.log(getObjectValues(对话))
//[“测试消息1”、“测试消息2”、“测试消息3”、“测试消息4”、“测试消息5”、“测试消息6”]
编辑:

如果
Array.flat
在您的上下文中不可用,可以这样编写:

const getObjValues=(obj)=>(obj&&typeof obj==='object')
? 对象
.价值观(obj)
.map(GetObjValue)
.减少((a,b)=>a.concat(b),[])
:[obj]

您可以使用的可能副本您可以使用您可以使用的递归。如果您只想打印,您是否可以使用
JSON.stringify()
?@JuanMendes--为什么要使用它来打印?这将使对象字符串化…我认为OP需要每个键的值。如果要使其变短,请将
if
else
语句替换为:
(obj[key].constructor==object)?printValues(obj[key]):console.log(obj[key])
我将其更改为
。constructor===Object
,因为
typeof[]
也返回
Object
我将添加第一个条件来检查对象是否具有指定的属性:
if(obj.hasOwnProperty(key)){
@JuanMendes:
JSON.stringify()
也返回键,但我只需要值。我刚刚注意到并修复了它!感谢jQuery解决方案。我认为这是tymeJV answer的jQuery版本。小心-typeof(null)将返回“object”,因为很久以前有一个奇怪的JS错误。