2016-07-26 166 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 
    } 
     ] 

    } 

有没有办法来重新排列,使各行重新排序最高到最低,并相应的标签进行重新排序太像下面的结果:到目前为止,我有重新排序阵列

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

    } 

设法使用以下方式对行数组进行重新排序,但在涉及标签时卡住了?

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

排序方法不能与对象 –

+0

使用的@PranavCBalan我已经parseJSON(数据)之后的阵列中使用排序; – ShambalaG

+0

你正在对单个元素数组应用排序方法....我想你需要重新排列数组元素对象中的值 –

回答

2

获取对象值并将其排序。排序后,根据排序的数组更新实际对象。

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