Sorting JavaScript Object by key value Recursively
javascript, node.js, recursion, sorting
Solution
I think what @ksr89 means is that when we apply a for - in loop, we get keys in sorted order. I think this is a valid use case especially in the development of Node.js based ORMs
The following function should work and is I think what you are looking for.
input = {
"Memo": {
"itemAmount1": "5",
"taxName1": "TAX",
"productPrice1": "10",
"accountName1": "Account Receivable (Debtors)"
},
"Footer": {
"productDescription2": "Maggie",
"itemQuantity2": "49.5",
"accountName2": "Account Receivable (Debtors)",
"taxName2": "TAX"
},
"Header": {
"itemDiscount3": "10",
"accountName3": "Account Receivable (Debtors)",
"productPrice3": "10",
"taxName3": "TAX"
}
}
window.sortedObject = sort(input);
function sort(object){
if (typeof object != "object" || object instanceof Array) // Not to sort the array
return object;
var keys = Object.keys(object);
keys.sort();
var newObject = {};
for (var i = 0; i < keys.length; i++){
newObject[keys[i]] = sort(object[keys[i]])
}
return newObject;
}
for (var key in sortedObject){
console.log (key);
//Prints keys in order
}
Problem
Sort the objects by keys whose value is also an object and sort that internal object as well i.e sort the object recursively. Sorting should be as per key. I looked into Stackoverflow's other questions but None of them is for Object Recursive Sorting. Question I looked into: Sorting JavaScript Object by property value Example: ``` input = { "Memo": { "itemAmount1": "5", "taxName1": "TAX", "productPrice1": "10", "accountName1": "Account Receivable (Debtors)" }, "Footer": { "productDescription2": "Maggie", "itemQuantity2": "49.5", "accountName2": "Account Receivable (Debtors)", "taxName2": "TAX" }, "Header": { "itemDiscount3": "10", "accountName3": "Account Receivable (Debtors)", "productPrice3": "10", "taxName3": "TAX" } } ``` Output ``` output = { "Footer": { "accountName2": "Account Receivable (Debtors)", "itemQuantity2": "49.5", "productDescription2": "Maggie", "taxName2": "TAX" }, "Header": { "accountName3": "Account Receivable (Debtors)", "itemDiscount3": "10", "productPrice3": "10", "taxName3": "TAX" }, "Memo": { "accountName1": "Account Receivable (Debtors)", "itemAmount1": "5", "productPrice1": "10", "taxName1": "TAX" } } ``` It is not necessary that it is 2 level object hierarchy it may contain n level of object hierarchy which need to be sorted.