我试图压扁一个对象,其中键将是叶节点的完整路径.我可以递归地识别哪些是叶节点但是试图构建整个路径.
样本输入:
{ 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);