简体   繁体   English

如何打印出对象的所有键和子键

[英]How to print out all the keys and subkeys of an object

JSFiddle version with spacing: http://jsfiddle.net/eopth925/1/ 带有空格的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); 

The way it's outputting is not view friendly. 它的输出方式不是视图友好的。 I would like to add proper indentation in the output. 我想在输出中添加适当的缩进。 I am sure there is a more efficient way of doing what I am trying to accomplish. 我确信,有一种更有效的方式来完成我要完成的任务。

How can I update my script so it displays like this: 如何更新脚本,使其显示如下:

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

Why not just use JSON.stringify ? 为什么不只使用JSON.stringify

console.log(JSON.stringify(foo, (key, val) => (typeof val === 'function' ? '' + val : val), 2)) console.log(JSON.stringify(foo,(key,val)=>(typeof val ==='function'?''+ val:val),2))

const yourObject = { /* object properties here */ } const yourObject = {/ *此处的对象属性* /}

 function printKeys(obj) { if (typeof obj === 'object') { const keys = Object.keys(obj) for (const key of keys) { printKeys(key) } } else { console.log(obj) } } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM