2012-04-13 60 views
2

考慮到我有以下JSON,我怎麼能生成另一個JSON,按字段排序(比如說anoCobranca)?使用Javascript訂購JSON

{ 
    "extratos": [ 
    { 
     "descricao":   "product A", 
     "anoCobranca":  2012, 
     "mesCobranca":  01, 
     "nomeMesCobranca": "Janeiro", 
     "diaUsoInicial":  1, 
     "diaUsoFinal":  30, 
     "valor":    "236.81", 
     "vencimento":  "24/01/2012", 
     "formaPagamento": "Cartão", 
     "situacao": "ok" 
    }, 
    { 
     "descricao":   "product B", 
     "anoCobranca":  2012, 
     "mesCobranca":  2, 
     "nomeMesCobranca": "Fevereiro", 
     "diaUsoInicial":  1, 
     "diaUsoFinal":  29, 
     "valor":    "249.81", 
     "vencimento":  "24/02/2012", 
     "formaPagamento": "-", 
     "situacao":   "aberto" 
    }, 
    { 
     "descricao":   "product 1", 
     "anoCobranca":  2012, 
     "mesCobranca":  3, 
     "nomeMesCobranca": "Março", 
     "diaUsoInicial":  1, 
     "diaUsoFinal":  31, 
     "valor":    "339.11", 
     "vencimento":  "24/03/2012", 
     "formaPagamento": "Cartão", 
     "situacao":   "ok" 
    }, 
    { 
     "descricao":   "product D", 
     "anoCobranca":  2011, 
     "mesCobranca":  4, 
     "nomeMesCobranca": "Abril", 
     "diaUsoInicial":  1, 
     "diaUsoFinal":  30, 
     "valor":    "119.18", 
     "vencimento":  "24/04/2012", 
     "formaPagamento": "Cartão", 
     "situacao":   "ok" 
    }, 
    { 
     "descricao":   "product E", 
     "anoCobranca":  2011, 
     "mesCobranca":  5, 
     "nomeMesCobranca": "Maio", 
     "diaUsoInicial":  1, 
     "diaUsoFinal":  30, 
     "valor":    "81.29", 
     "vencimento":  "24/05/2012", 
     "formaPagamento": "-", 
     "situacao":   "aberto" 
    } 
    ] 
} 

我試着像一些技巧:

function sortJSON(a,b){ 
    return parseInt(a.json.extratos.anoCobranca - b.json.extratos.anoCobranca) 
} 

和其他幾個人,我發現在這裏,在StackOverflow的,但他們都失敗了。

回答

5

排序有一個回調函數數組:

obj.extratos.sort(function(a, b) { 
    return a.anoCobranca - b.anoCobranca; 
}); 
1

如果你不反對使用外部庫,然後我會建議使用Underscore.js來解決這個和類似的問題。下面是我在下面一條線做一個例子:

var model = { 
    "extratos": [ 
    { 
     "descricao":   "product A", 
     "anoCobranca":  2012, 

      . 
      . 
      . 

     "situacao":   "aberto" 
    } 
    ] 
}; 

model.extratos = _.sortBy(model.extratos, 
        function (extrato) { return extrato.anoCobranca; }); 

console.log(model); 

,這裏是一個的jsfiddle在這裏你可以與玩:http://jsfiddle.net/JohnMunsch/4eE2F/

Yanick的解決方案是一個很好的很好,但我認爲,下劃線庫具有廣泛的功能(例如,map和reduce),可以幫助您解決複雜的數據操作問題,這些問題超越了簡單的排序。