我试图压扁一个对象,其中键将是叶节点的完整路径.我可以递归地识别哪些是叶节点但是试图构建整个路径.
样本输入:
- {
- one: 1,two: {
- three: 3
- },four: {
- five: 5,six: {
- seven: 7
- },eight: 8
- },nine: 9
- }
输出:
- {
- one: 1,'two.three': 3,'four.five': 5,'four.six.seven': 7,'four.eight': 8,nine: 9
- }
解决方法
您可以使用递归的approch并收集对象的键.该提议也在寻找数组.
- function getFlatObject(object) {
- function iter(o,p) {
- if (Array.isArray(o) ){
- o.forEach(function (a,i) {
- iter(a,p.concat(i));
- });
- return;
- }
- if (o !== null && typeof o === 'object') {
- Object.keys(o).forEach(function (k) {
- iter(o[k],p.concat(k));
- });
- return;
- }
- path[p.join('.')] = o;
- }
- var path = {};
- iter(object,[]);
- return path;
- }
- var obj = { one: 1,two: { three: 3 },four: { five: 5,six: { seven: 7 },eight: 8 },nine: 9 },path = getFlatObject(obj);
- console.log(path);