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错误。