2016-07-26 4 views
1
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 
    } 
     ] 

    } 

Gibt es eine Möglichkeit, die Ergebnisse neu zu ordnen, so dass die Reihen höchsten zum niedrigsten neu geordnet werden und die entsprechenden Etiketten werden auch wie die folgenden neu geordnet:Reorder-Arrays innerhalb json Objekt

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 
    } 
     ] 

    } 

Bisher habe ich hat es geschafft, das rows-Array mit den folgenden neu zu ordnen, aber fest, wenn es um Etiketten geht?

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

Art von Verfahren kann nicht mit Object –

+0

verwenden @PranavCBalan I für eine Array-Art verwendet, nachdem parseJSON (Daten); – ShambalaG

+0

Sie wenden Sortiermethode auf dem einzelnen Element-Array an .... Ich denke, Sie müssen den Wert im Array-Element-Objekt –

Antwort

2

Holen Sie die Objektwerte in ein Array und sortieren Sie sie. Nach der Sortierung wird das reale Objekt basierend auf dem sortierten Array aktualisiert.

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);