考虑到我有以下JSON,我怎样才能生成另一个JSON,按字段排序(让我们说anoCobranca
)?
{
"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找到的其他一些人,但他们都失败了。
答案 0 :(得分:5)
使用回调函数对数组进行排序:
obj.extratos.sort(function(a, b) {
return a.anoCobranca - b.anoCobranca;
});
答案 1 :(得分: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的解决方案也是一个很好的解决方案,但我认为Underscore库具有广泛的功能(例如,map和reduce),可以帮助您解决一组复杂的数据操作问题,这些问题超越了简单的排序。
答案 2 :(得分:1)
使用underscore即可:
_(obj.extratos).pluck(propertyName).sort()