I have an array of objects as below. I want to recursively sort this based on the key values
{
"settingsList": [
{
"category1": [
{
"categoryName": "DRIVER",
"description": "DRIVER",
"sequence": 1
},
{
"categoryName": "BALL",
"description": "BALL",
"sequence": 2
},
{
"categoryName": "SAMPLE",
"description": "SAMPLE",
"sequence": 3
},
{
"categoryName": "USER",
"description": "USER",
"sequence": 4
}
]
},
{
"category2": [
{
"paramName": "CPP",
"description": "CPP",
"sequence": 1
},
{
"paramName": "PP",
"description": "PP",
"sequence": 2
},
{
"paramName": "MP",
"description": "MP",
"sequence": 3
}
]
}
{
"source": {
"instanceName": "instance_1"
}
}
]
}
How can I efficiently sort recursively to display it sorted alphabetically on the key values. Expected output:
{
"settingsList": [
{
"category": [
{
"categoryName": "BALL",
"description": "BALL",
"sequence": 2
},
{
"categoryName": "DRIVER",
"description": "DRIVER",
"sequence": 1
},
{
"categoryName": "SAMPLE",
"description": "SAMPLE",
"sequence": 3
},
{
"categoryName": "USER",
"description": "USER",
"sequence": 4
}
]
},
{
"category2": [
{
"paramName": "CPP",
"description": "CPP",
"sequence": 1
},
{
"paramName": "MP",
"description": "MP",
"sequence": 3
},
{
"paramName": "PP",
"description": "PP",
"sequence": 2
}
]
},
{
"source": {
"instanceName": "instance_1"
}
}
]
}
below is the sample code that was tried
var object = {
"settingsList": [
{
"category1": [
{
"categoryName": "DRIVER",
"description": "DRIVER",
"sequence": 1
},
{
"categoryName": "BALL",
"description": "BALL",
"sequence": 2
},
{
"categoryName": "SAMPLE",
"description": "SAMPLE",
"sequence": 3
},
{
"categoryName": "USER",
"description": "USER",
"sequence": 4
}
]
},
{
"category2": [
{
"paramName": "CPP",
"description": "CPP",
"sequence": 1
},
{
"paramName": "PP",
"description": "PP",
"sequence": 2
},
{
"paramName": "MP",
"description": "MP",
"sequence": 3
}
]
},
{
"source": {
"instanceName": "instance_1"
}
}
]
}
var keys = Object.keys(object);
var sortedKeys = keys.sort((key1, key2)=>{
key1 = key1.toLowerCase();
key2 = key2.toLowerCase();
if(key1 < key2) return -1;
if(key1 > key2) return 1;
return 0;
})
function sortData(object){
var newObject = {},
keys = Object.keys(object);
keys.sort(function(key1, key2){
key1 = key1.toLowerCase();
key2 = key2.toLowerCase();
if(key1 < key2) return -1;
if(key1 > key2) return 1;
return 0;
});
for(var index in keys){
var key = keys[index];
if(typeof object[key] == 'object' && !(object[key] instanceof Array)){
newObject[key] = sortData(object[key]);
} else {
newObject[key] = object[key];
}
}
return newObject;
}
var sortedData=sortData(object)
console.log(sortedData)
....................................................................................................................................................................................................................................................................
description? What have you tried so far?