1

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?

Nikola Pavicevic
  • 21,952
  • 9
  • 25
  • 46
Bowis
  • 541
  • 8
  • 31
  • 1
    Does this answer your question? [Sort array of objects by string property value](https://stackoverflow.com/questions/1129216/sort-array-of-objects-by-string-property-value) – Wyck Jul 14 '21 at 15:18
  • @Wyck no, because in that example you know the key of the object property, in my case I need to search for this key based on the user input, which is the `filterType` variable – Bowis Jul 14 '21 at 15:19
  • 1
    Are you looking for computed property names ? this.products.sort((a, b) => parseFloat(b[filterType]) - parseFloat(a[filterType])); – Tushar Shahi Jul 14 '21 at 15:21

2 Answers2

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

Does this answer your question?

Sanket Shah
  • 2,888
  • 1
  • 11
  • 22
1

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)
Nikola Pavicevic
  • 21,952
  • 9
  • 25
  • 46