javascript - 如何打印出对象的所有键和子键
问题描述
带间距的 JSFiddle 版本:http: //jsfiddle.net/eopth925/1/
var obj = {
test: {
test2: "test",
test3: {
base: {
base: {
check: function() {
return this;
},
va: function() {
return "value";
},
do: "this is dummy"
}
}
},
test4: {
test5: function() {
var k = 2;
k++;
return k;
},
test6: {
test7: {
test8: "test8",
test9: {
test10: "test10",
test11: function() {
return window.jQuery;
},
test12: "test12",
test13: function() {
return window.ga;
}
}
}
}
}
},
};
var output = "";
var addbreak = "\n";
var RunFunc = {
propertypri: function(a) {
Object.keys(a).forEach(function(e) {
if (typeof a[e] === 'object') {
output += `Main Key=${e}`;
RunFunc.propertyobj(e, a[e]);
}
else {
output += `Main Key=${e} value=${a[e]}` + addbreak;
}
});
console.log(output);
},
propertyobj: function(key, keyObj) {
Object.keys(keyObj).forEach(function(e) {
if (typeof keyObj[e] === 'object') {
output += ` Subkey=${e}`;
RunFunc.propertyobj(e, keyObj[e]);
}
else {
output += ` Subkey=${e} value=${keyObj[e]}` + addbreak;
}
});
}
};
RunFunc.propertypri(obj);
它的输出方式不友好。我想在输出中添加适当的缩进。我确信有一种更有效的方式来做我想要完成的事情。
如何更新我的脚本,使其显示如下:
Main Key=test
Subkey=test2 value=test
Subkey=test3
Subkey=base
Subkey=base
Subkey=check value=function() {
return this;
}
Subkey=va value=function() {
return "value";
}
Subkey=do value=this is dummy
Subkey=test4
Subkey=test5 value=function() {
var k = 2;
k++;
return k;
}
Subkey=test6
Subkey=test7
Subkey=test8 value=test8
Subkey=test9
Subkey=test10 value=test10
Subkey=test11 value=function() {
return window.jQuery;
}
...
解决方案
为什么不直接使用JSON.stringify
?
console.log(JSON.stringify(foo, (key, val) => (typeof val === 'function' ? '' + val : val), 2))
推荐阅读
- azure-service-fabric - Azure Service Fabric - 大型跟踪日志文件夹
- r - 事件矩阵名称提取所有 TRUE
- http - HTTP 用户/密码抓取混乱
- python - 如何比较两个熊猫数据框并删除一个文件上的重复项而不附加其他文件中的数据
- r - 将 aa 字符列转换为具有多种格式的日期
- scala - 如何缩小列表但保证它不为空?
- maven - 无法使用 Maven Archetype 为 opendaylight 创建项目
- performance - 在 Ubuntu 16.04 上输入时 Android Studio 变得迟钝
- php - 在 laravel 中找不到类路径
- c# - 如何解决以下代码的错误?