javascript - Sorting an array of objects by property values

ID : 711

viewed : 122

Tags : javascriptarrayssorting

Top 5 Answer for javascript - Sorting an array of objects by property values

vote vote

97

Sort homes by price in ascending order:

homes.sort(function(a, b) {     return parseFloat(a.price) - parseFloat(b.price); }); 

Or after ES6 version:

homes.sort((a, b) => parseFloat(a.price) - parseFloat(b.price)); 

Some documentation can be found here.

For descending order, you may use

homes.sort((a, b) => parseFloat(b.price) - parseFloat(a.price)); 
vote vote

90

Here's a more flexible version, which allows you to create reusable sort functions, and sort by any field.

const sort_by = (field, reverse, primer) => {      const key = primer ?      function(x) {        return primer(x[field])      } :      function(x) {        return x[field]      };      reverse = !reverse ? 1 : -1;      return function(a, b) {      return a = key(a), b = key(b), reverse * ((a > b) - (b > a));    }  }      //Now you can sort by any field at will...    const homes=[{h_id:"3",city:"Dallas",state:"TX",zip:"75201",price:"162500"},{h_id:"4",city:"Bevery Hills",state:"CA",zip:"90210",price:"319250"},{h_id:"5",city:"New York",state:"NY",zip:"00010",price:"962500"}];    // Sort by price high to low  console.log(homes.sort(sort_by('price', true, parseInt)));    // Sort by city, case-insensitive, A-Z  console.log(homes.sort(sort_by('city', false, (a) =>  a.toUpperCase()  )));

vote vote

79

To sort it you need to create a comparator function taking two arguments. Then call the sort function with that comparator function as follows:

// a and b are object elements of your array function mycomparator(a,b) {   return parseInt(a.price, 10) - parseInt(b.price, 10); } homes.sort(mycomparator); 

If you want to sort ascending switch the expressions on each side of the minus sign.

vote vote

60

for string sorting in case some one needs it,

const dataArr = {      "hello": [{      "id": 114,      "keyword": "zzzzzz",      "region": "Sri Lanka",      "supportGroup": "administrators",      "category": "Category2"    }, {      "id": 115,      "keyword": "aaaaa",      "region": "Japan",      "supportGroup": "developers",      "category": "Category2"    }]    };  const sortArray = dataArr['hello'];    console.log(sortArray.sort((a, b) => {    if (a.region < b.region)      return -1;    if (a.region > b.region)      return 1;    return 0;  }));

vote vote

55

If you have an ES6 compliant browser you can use:

The difference between ascending and descending sort order is the sign of the value returned by your compare function:

var ascending = homes.sort((a, b) => Number(a.price) - Number(b.price)); var descending = homes.sort((a, b) => Number(b.price) - Number(a.price)); 

Here's a working code snippet:

var homes = [{    "h_id": "3",    "city": "Dallas",    "state": "TX",    "zip": "75201",    "price": "162500"  }, {    "h_id": "4",    "city": "Bevery Hills",    "state": "CA",    "zip": "90210",    "price": "319250"  }, {    "h_id": "5",    "city": "New York",    "state": "NY",    "zip": "00010",    "price": "962500"  }];    homes.sort((a, b) => Number(a.price) - Number(b.price));  console.log("ascending", homes);    homes.sort((a, b) => Number(b.price) - Number(a.price));  console.log("descending", homes);

Top 3 video Explaining javascript - Sorting an array of objects by property values

Related QUESTION?