Reputation: 1970
I have this nested object which I want to sort alphabetically,
var obj = {
'ABCD' : {
'E' : {},
'R' : {},
'A' : {},
'E' : {}
},
'WXYZ' : {
'F' : {},
'M' : {},
'G' : {},
'A' : {}
},
'MNOP' : {
'A' : {},
'H' : {},
'B' : {},
'C' : {}
},
'EFGH' : {
'D' : {},
'C' : {},
'B' : {},
'E' : {}
}
}
I want the output to be like this-
{
'ABCD' : {
'A' : {},
'E' : {},
'E' : {},
'R' : {}
},
'EFGH' : {
'B' : {},
'C' : {},
'D' : {},
'E' : {}
},
'MNOP' : {
'A' : {},
'B' : {},
'C' : {},
'H' : {}
},
'WXYZ' : {
'A' : {},
'F' : {},
'G' : {},
'M' : {}
}
}
I have written code to sort direct keys, but I am not getting how can I sort further object within those keys, Here's my code-
var sorted = {}
Object.keys(obj).sort().forEach(function(val) {
sorted[val] = obj[val]
})
Please suggest on how can I achieve the output mentioned above. Thanks.
Upvotes: 3
Views: 264
Reputation: 45
Recursive version
function sortedFunc(inputObj){
var sorted = {}
//get keys
const keys = Object.keys(inputObj).sort();
keys.forEach( key => {
if(inputObj[key] instanceof Object){
sorted[key] = sortedFunc(inputObj[key]);
} else {
sorted[key] = inputObj[key];
}
});
return sorted;
}
Upvotes: 0
Reputation: 8251
Assign an empty object first, and add sorted properties.
var sorted = {}
Object.keys(obj).sort().forEach(function(val) {
sorted[val] = {}
Object.keys(obj[val]).sort().forEach(function(val2) {
sorted[val][val2] = obj[val][val2]
})
})
Complete snippet:
var obj = {
'ABCD': {
'E': {},
'R': {},
'A': {},
'E': {}
},
'WXYZ': {
'F': {},
'M': {},
'G': {},
'A': {}
},
'MNOP': {
'A': {},
'H': {},
'B': {},
'C': {}
},
'EFGH': {
'D': {},
'C': {},
'B': {},
'E': {}
}
}
var sorted = {}
Object.keys(obj).sort().forEach(function(val) {
sorted[val] = {}
Object.keys(obj[val]).sort().forEach(function(val2) {
sorted[val][val2] = obj[val][val2]
})
})
console.log(sorted)
Upvotes: 1
Reputation: 386604
You could take an recursive approach for nested objects.
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; }
Upvotes: 4