Search code examples
javascriptvue.jsvuejs2lodash

Vuejs _.orderBy is not sorting the json


UPDATE Below is the json which I get through API using axios.

 bannerData= [
        {
          "id": 118,
          "title": "Geruchsbel\u00e4stigung",
          "location": "DOR",
          "pressInformation": [
            {
                "id": 257,
                "title": "Chemi257"
              },
              {
               "id": 256,
               "title": "Chemi256",
              }
          ]
        },
        {
          "id": 144,
          "title": "Testing Stage",
          "location": "LEV",
          "pressInformation": [
            {
              "id": 254,
               "title": "Chemi254",
            },
            {
              "id": 261,
               "title": "Chemi261",
            }
          ]
        }
      ]
computed: {
    orderedUsers: function() {
      this.secondSubBanner = [];
      for (let i = 0; i < this.bannerData.length; i++) {
        this.subBanner = this.bannerData[i].pressInformation;
        for (let j = 0; j < this.subBanner.length; j++) {
          this.secondSubBanner.push(this.subBanner[j].id);
          console.log(this.secondSubBanner); // output: 257, 256, 254,261
        }
      }
      return this.secondSubBanner;
    },
sortedArray() {
      let v = this.orderedUsers.sort();
      console.log(v); // output: 254, 256, 257, 261
      return _.orderBy(this.bannerData, v)
    }

sortedArray is printing the id's in order using sort(). But it cannot sort the Json properites depends using _.orderBy(). Can anyone say where I have done the mistake?


Solution

  • Try this algorithm. I think with what you want, you don't need lodash. I only used flatMap() and sort() built-in to get this:

    function sortedArray(bannerData) {
      const array = bannerData.flatMap(x => x.pressInformation)
      return array.sort( (a,b) => a.id - b.id )
    }
    
    bannerData = [
      {
        "id": 118,
        "title": "Geruchsbel\u00e4stigung",
        "location": "DOR",
        "pressInformation": [
          {
            "id": 257,
            "title": "Chemi257"
          },
          {
            "id": 256,
            "title": "Chemi256",
          }
        ]
      },
      {
        "id": 144,
        "title": "Testing Stage",
        "location": "LEV",
        "pressInformation": [
          {
            "id": 254,
            "title": "Chemi254",
          },
          {
            "id": 261,
            "title": "Chemi261",
          }
        ]
      }
    ]
    
    console.log(sortedArray(bannerData))