首页 > 解决方案 > 将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 ..有可能转换??

我想使用 repeat for 和 hasOwnproperty。

如果它不起作用,我想将其更改为数组。

帮助。

标签: javascriptarraysjson

解决方案


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

您可以使用 . 检查您是否在分支的末尾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));
    


推荐阅读