2012-04-13 125 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),可以帮助您解决复杂的数据操作问题,这些问题超越了简单的排序。