转换为json对象以转换为数组

时间:2018-12-12 14:49:14

标签: javascript arrays json

var object = 
{ 
  'a':  
  { 
 'b': { 'ba': {}, 'bb': {}, 'bc': {}, 'bd': {} },
 'c: { 'ca': {}, 'cb': {}, 'cc': {} },
 'd': {},
 'e': { 'ea': {}, 'eb': {}, 'ec: {}, 'ed': {}, 'ef': {} },
 'f: {},
 'g': {},
 'h': {} 
 },

 'aa':   
 { 
 'bb': { 'bba': {},  'bbb': {},''bbc': {},'bbd': {},'bbe': {},  
 'bbf': {}, 'bbg': {} },
 'cc': {},
 'dd': { 'dda': {}, 'ddb': {}, 'ddc': {} },
 'ee': {},
 'ff': {} 
 },

}

我想转换成这样

['a b ba'] ['a b bb'] ['a b bc'] ['a b bd']
['a c ca'] ['a c cb'] ['a c cc']['a d'] 
['a e ea'] ['a e eb'] ['a e ec'] ['a e ed'] ['a e ef']
['a f']['a g']['a h']
['aa bb bba'] ['aa bb bbb'] ['aa bb bbc'] ['aa bb bbd'] ['aa bb bbf'] 
['aa bb bbg']
['aa cc']['aa dd dda'] ['aa dd ddb'] ['aa dd ddc']['aa ee']['aa ff']

仅javascript ..可以转换??

我想对和具有自己的财产使用重复。

如果它不能那样工作,我想将其更改为数组。

帮助。

1 个答案:

答案 0 :(得分:1)

您需要递归遍历对象的嵌套键结构。

您可以使用Object.keys检查您是否在分支的结尾。如果没有键,我们可以返回。

您可以使用Object.entries

遍历节点的分支

通过使用concat,我们继续向平面结果数组中添加分支,直到我们查看了树中的每个节点为止。

var object={a:{b:{ba:{},bb:{},bc:{},bd:{}},c:{ca:{},cb:{},cc:{}},d:{},e:{ea:{},eb:{},ec:{},ed:{},ef:{}},f:{},g:{},h:{}},aa:{bb:{bba:{},bbb:{},bbc:{},bbd:{},bbe:{},bbf:{},bbg:{}},cc:{},dd:{dda:{},ddb:{},ddc:{}},ee:{},ff:{}}};

var keyPaths = (obj, path = [], paths = []) => 
  Object.keys(obj).length === 0
    ? paths.concat(path.join(" "))
    : Object.entries(obj)
            .reduce(
              (ps, [k, v]) => keyPaths(v, path.concat(k), ps),
              paths
            );
            
            
console.log(keyPaths(object));