2

次の 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 で見つけた他のいくつかのものを見つけましたが、それらはすべて失敗しました。

4

3 に答える 3

5

コールバック関数を使用して配列を並べ替えます。

obj.extratos.sort(function(a, b) {
  return a.anoCobranca - b.anoCobranca;
});
于 2012-04-13T12:42:45.953 に答える
1

外部ライブラリの使用を嫌がらない場合は、Underscore.jsを使用してこの問題や同様の問題を解決することをお勧めします。これは、以下の1行でそれを行っている私の例です。

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など)があると思います。

于 2012-04-13T12:49:59.447 に答える
1

アンダースコアを使用すると、次のことができます。

_(obj.extratos).pluck(propertyName).sort() 
于 2012-04-13T12:53:24.527 に答える