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 ..可以转换??
我想对和具有自己的财产使用重复。
如果它不能那样工作,我想将其更改为数组。
帮助。
答案 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));