首页 > 解决方案 > 如何打印出对象的所有键和子键

问题描述

带间距的 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;
            }
            ...

标签: javascript

解决方案


为什么不直接使用JSON.stringify

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


推荐阅读