Bowis
Bowis

Reputation: 632

Sort array of objects based on string parameter

I have the following array of objects:

   [
     {
       "id" : 1,
       "pricePerDay" : 50,
     }, 
     {
       "id" : 2,
       "pricePerDay" : 70   
     }
   ]

Based on the user input from a i want to filter either ASC or DESC on the pricePerday. Obviously this would work with:

 this.products.sort((a, b) => parseFloat(b.pricePerDay) - parseFloat(a.pricePerDay));

BUT i have the variable filterType which now contains the string 'pricePerDay'. How can I use this variable to search the array of objects to properties that have the same key and sort this array based on that key?

Upvotes: 1

Views: 233

Answers (2)

Nikola Pavicevic
Nikola Pavicevic

Reputation: 23480

You can change filterType to field that you want and acs to false if you want desc order

 const arr = [
     {
       "id" : 1,
       "pricePerDay" : 50,
           
     }, 
     {
       "id" : 2,
       "pricePerDay" : 70   
     }
   ]

 let filterType = 'pricePerDay'
 let asc = false

 const res = arr.sort((a, b) => {
  if (asc) {
    return parseFloat(a[filterType]) - parseFloat(b[filterType])
  } else {
    return parseFloat(b[filterType]) - parseFloat(a[filterType])
  }
 });
 console.log(res)

Upvotes: 1

Sanket Shah
Sanket Shah

Reputation: 3091

this.products.sort((a, b) => parseFloat(b[filterType]) - parseFloat(a[filterType]));

Does this answer your question?

Upvotes: 3

Related Questions