简体   繁体   中英

Reorder arrays within json object

var data = {
 chart : 'rank',
 labels: [
      {
       0: 'First Choice'
       1: 'Second Choice',   
       2: 'Third Choice',
       3: 'Fourth Choice',
       4: 'Fifth Choice'
      }
 ],
rows: [
     {
      0: 2,
      1: 8,
      2: 1,
      3: 30
      4: 4
     }
      ]

   }

Is there a way to reorder the results so that the rows are reordered highest to lowest and the corresponding labels are reordered too like the below:

var data = {
 chart : 'rank',
 labels: [
      {
       0: 'Fourth Choice'
       1: 'Second Choice',   
       2: 'Fifth Choice',
       3: 'First Choice',
       4: 'Third Choice'
      }
 ],
rows: [
     {
      0: 30,
      1: 8,
      2: 4,
      3: 2
      4: 1
     }
      ]

   }

So far I have managed to reorder the rows array using the following but stuck when it comes to labels?

rows = rows.sort(function(a, b){return b-a});

Get the object values into an array and sort it. After sorting update the real object based on sorted array.

 var data = { chart: 'rank', labels: [{ 0: 'First Choice', 1: 'Second Choice', 2: 'Third Choice', 3: 'Fourth Choice', 4: 'Fifth Choice' }], rows: [{ 0: 2, 1: 8, 2: 1, 3: 30, 4: 4 }] }; // get object property name array Object.keys(data.labels[0]) // generate array with object values .map(function(k) { return [data.labels[0][k], data.rows[0][k]] // sort the array based on rows value in array }).sort(function(a, b) { return b[1] - a[1]; // iterate and update real object }).forEach(function(v, i) { data.labels[0][i] = v[0]; data.rows[0][i] = v[1]; }); console.log(data); 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM