Sorting Json (By Specific Element) Alphabetically
I Have Some Json That Is Formatted Like: Places =[ { "City":"Los Angeles", "Country":"Usa", }, { "City":"Boston", "Country":"Usa", }, { "City":"Chicago"...
I have some JSON that is formatted like:
places =[
{
"city":"Los Angeles",
"country":"USA",
},
{
"city":"Boston",
"country":"USA",
},
{
"city":"Chicago",
"country":"USA",
},
]
et cetera...
I am trying to sort this alphabetically BY CITY and am having trouble doing so. I believe the root of my issue seems to be determining the order of the characters (versus numbers). I've tried a simple:
places.sort(function(a,b) {
return(a.city) - (b.customInfo.city);
});
yet, this subtraction doesnt know what to do. Can someone help me out?
2 Answers
Unfortunately there is no generic "compare" function in JavaScript to return a suitable value for sort(). I'd write a compareStrings function that uses comparison operators and then use it in the sort function.
function compareStrings(a, b) {
// Assuming you want case-insensitive comparison
a = a.toLowerCase();
b = b.toLowerCase();
return (a < b) ? -1 : (a > b) ? 1 : 0;
}
places.sort(function(a, b) {
return compareStrings(a.city, b.city);
})
Matti's solution is correct, but you can write it more simply. You don't need the extra function call; you can put the logic directly in the sort callback.
For case-insensitive sorting:
places.sort( function( a, b ) {
a = a.city.toLowerCase();
b = b.city.toLowerCase();
return a < b ? -1 : a > b ? 1 : 0;
});
For case-sensitive sorting:
places.sort( function( a, b ) {
return a.city < b.city ? -1 : a.city > b.city ? 1 : 0;
});