如何使用javascript展平嵌套对象

时间:2017-09-08 15:27:20

标签: javascript

var obj = {
a: {
    aa: {
        aaa: {
            aaaa: "a"
        }
    }
},
b: {
    bb: {
        bbb: "b"
    }
  }
}
flatten(obj)
//=>[["a","b"],["aa","bb"],["aaa","bbb"],["aaaa"]]

这是一个有趣的问题,我的朋友说BFS或DFS能够解决问题,但我不能

1 个答案:

答案 0 :(得分:0)

你可以使用递归并保持一个级别计数器,在递归的每一步中向结果数组添加键。为此,您必须检查该级别是否已存在数组,然后连接到该数组。

var obj = {
a: {
aa: {
    aaa: {
        aaaa: "a"
    }
}
},
b: {
bb: {
    bbb: "b"
}
  }
}
var result = [];
function flatten(obj, level){
   var keys = Object.keys(obj);
   result[level] = result[level] !== undefined ? result[level].concat(keys) : keys;

   keys.forEach(x => typeof obj[x] === 'object' && flatten(obj[x], level + 1));
}

flatten(obj, 0);
console.log(result);