Sorting a JSON object in Javascript Sorting a JSON object in Javascript json json

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;    }});