Sorting a JSON object in Javascript
function sortJsonArrayByProperty(objArray, prop, direction){ if (arguments.length<2) throw new Error("sortJsonArrayByProp requires 2 arguments"); var direct = arguments.length>2 ? arguments[2] : 1; //Default to ascending if (objArray && objArray.constructor===Array){ var propPath = (prop.constructor===Array) ? prop : prop.split("."); objArray.sort(function(a,b){ for (var p in propPath){ if (a[propPath[p]] && b[propPath[p]]){ a = a[propPath[p]]; b = b[propPath[p]]; } } // convert numeric strings to integers a = a.match(/^\d+$/) ? +a : a; b = b.match(/^\d+$/) ? +b : b; return ( (a < b) ? -1*direct : ((a > b) ? 1*direct : 0) ); }); }}sortJsonArrayByProperty(results, 'attributes.OBJECTID');sortJsonArrayByProperty(results, 'attributes.OBJECTID', -1);
UPDATED: DON'T MUTATE
function sortByProperty(objArray, prop, direction){ if (arguments.length<2) throw new Error("ARRAY, AND OBJECT PROPERTY MINIMUM ARGUMENTS, OPTIONAL DIRECTION"); if (!Array.isArray(objArray)) throw new Error("FIRST ARGUMENT NOT AN ARRAY"); const clone = objArray.slice(0); const direct = arguments.length>2 ? arguments[2] : 1; //Default to ascending const propPath = (prop.constructor===Array) ? prop : prop.split("."); clone.sort(function(a,b){ for (let p in propPath){ if (a[propPath[p]] && b[propPath[p]]){ a = a[propPath[p]]; b = b[propPath[p]]; } } // convert numeric strings to integers a = a.match(/^\d+$/) ? +a : a; b = b.match(/^\d+$/) ? +b : b; return ( (a < b) ? -1*direct : ((a > b) ? 1*direct : 0) ); }); return clone;}const resultsByObjectId = sortByProperty(results, 'attributes.OBJECTID');const resultsByObjectIdDescending = sortByProperty(results, 'attributes.OBJECTID', -1);
First extract the JSON encoded data:
var data = JSON.parse(yourJSONString);var results = data['results'];
Then sort with a custom(user) function:
results.sort(function(a,b){ //return a.attributes.OBJECTID - b.attributes.OBJECTID; if(a.attributes.OBJECTID == b.attributes.OBJECTID) return 0; if(a.attributes.OBJECTID < b.attributes.OBJECTID) return -1; if(a.attributes.OBJECTID > b.attributes.OBJECTID) return 1;});
I assumed you wanted to sort by OBJECTID
, but you can change it to sort by anything.
you can sort an ordered array of anything by providing a custom compare function as a parameter to Array.Sort()
.
var myObject = /* json object from string */ ;myObject.results.sort(function (a, b) { // a and b will be two instances of your object from your list // possible return values var a1st = -1; // negative value means left item should appear first var b1st = 1; // positive value means right item should appear first var equal = 0; // zero means objects are equal // compare your object's property values and determine their order if (b.attributes.COMMERCIALNAME_E < a.attributes.COMMERCIALNAME_E) { return b1st; } else if (a.attributes.COMMERCIALNAME_E < b.attributes.COMMERCIALNAME_E) { return a1st; } else { return equal; }});