我有这个嵌套对象,我想按字母顺序对其进行排序,
var obj = {
'ABCD' : {
'E' : {},
'R' : {},
'A' : {},
'E' : {}
},
'WXYZ' : {
'F' : {},
'M' : {},
'G' : {},
'A' : {}
},
'MNOP' : {
'A' : {},
'H' : {},
'B' : {},
'C' : {}
},
'EFGH' : {
'D' : {},
'C' : {},
'B' : {},
'E' : {}
}
}
我希望输出像这样-
{
'ABCD' : {
'A' : {},
'E' : {},
'E' : {},
'R' : {}
},
'EFGH' : {
'B' : {},
'C' : {},
'D' : {},
'E' : {}
},
'MNOP' : {
'A' : {},
'B' : {},
'C' : {},
'H' : {}
},
'WXYZ' : {
'A' : {},
'F' : {},
'G' : {},
'M' : {}
}
}
我已经编写了代码来对直接键进行排序,但是我没有得到如何在这些键中对其他对象进行排序,
这是我的代码-
var sorted = {}
Object.keys(obj).sort().forEach(function(val) {
sorted[val] = obj[val]
})
请提出关于如何实现上述输出的建议。谢谢。
最佳答案
您可以对嵌套对象采取递归方法。
const
sort = o => Object.assign({}, ...Object
.keys(o)
.sort()
.map(k => ({ [k]: o[k] && typeof o[k] === 'object' ? sort(o[k]) : o[k] }))
);
var obj = { ABCD: { E: { }, R: { }, A: { } }, WXYZ: { F: { }, M: { }, G: { }, A: { } }, MNOP: { A: { }, H: { }, B: { }, C: { } }, EFGH: { D: { }, C: { }, B: { }, E: { } } },
sorted = sort(obj);
console.log(sorted);
.as-console-wrapper { max-height: 100% !important; top: 0; }