0

我有一些 json,我正在尝试对它进行分组。我正在尝试使用 javascript 来做到这一点。理想情况下,我希望将 JSON 分组在一起,并为每个组分配一个数字,以便循环遍历它。我的最终目标是拥有一个功能,这样我就可以选择按哪个键进行分组。

我试图使用一个函数但没有成功。我不知道从这里去哪里。

var groupBy = function(array, predicate) {
    var grouped = {};
    for(var i = 0; i < array.length; i++) {
        var groupKey = predicate(array[i]);
        if (typeof(grouped[groupKey]) === "undefined")
            grouped[groupKey] = [];
        grouped[groupKey].push(array[i]);
    }

    return grouped;
}

var groupData = groupBy(data, function (obj) {
    console.log(obj);
     return obj.category;
 });

我的json是

{
  "merchantcontract":"My Angel Dream Day Care Center 1 10137.01",
  "smi_transactiondate":"\/Date(1332831600000)\/",
  "smi_glamount2":5.8700,
  "smi_transactionclass":180870001,
  "smi_transactionclassname":"Residual Agent Commission",
  "smi_contractprodcutidname":"Traditional",
  "smi_agentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5",
  "smi_primaryagentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5"
},

{
  "merchantcontract":"My Angel Dream Day Care Center 1 10137.01",
  "smi_transactiondate":"\/Date(1331622000000)\/",
  "smi_glamount2":4.5792,
  "smi_transactionclass":180870001,
  "smi_transactionclassname":"Residual Agent Commission",
  "smi_contractprodcutidname":"Traditional",
  "smi_agentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5",
  "smi_primaryagentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5"
},

{
  "merchantcontract":"Eds Overhead Doors 10150.01",
  "smi_transactiondate":"\/Date(1333695600000)\/",
  "smi_glamount2":11.9300,
  "smi_transactionclass":180870001,
  "smi_transactionclassname":"Residual Agent Commission",
  "smi_contractprodcutidname":"Traditional",
  "smi_agentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5",
  "smi_primaryagentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5"
},

我需要的是对所有相同的商家合同进行分组,并将所有剩余部分分组在其中,这样我就可以加起来 glamount2

-My Angel Dream Day Care Center 1 10137.01
--Residual //This could be anything
----total of glamount2 in the residual of my angle
--foo
----total of glamount2 in the foo of my angle
4

1 回答 1

0

也许我遗漏了一些东西(你的意图让我感到困惑),但如果你只需要遍历这些对象并获得一个特定的属性,你就不需要以任何方式“重新组合”它们。

只需遍历对象并获得所需的任何属性:

​for(var i=0; i < myjson.length; i++){
    console.log(myjson[i].smi_glamount2);
}​

这假设这 3 个(或更多)对象都包含在一个数组中,如下所示:

var myjson = [{
    "merchantcontract": "My Angel Dream Day Care Center 1 10137.01",
    "smi_transactiondate": "\/Date(1332831600000)\/",
    "smi_glamount2": 5.8700,
    "smi_transactionclass": 180870001,
    "smi_transactionclassname": "Residual Agent Commission",
    "smi_contractprodcutidname": "Traditional",
    "smi_agentid": "1d3f44ee-afc3-e011-addf-a4badb1ddef5",
    "smi_primaryagentid": "1d3f44ee-afc3-e011-addf-a4badb1ddef5"
},
{
    "merchantcontract": "My Angel Dream Day Care Center 1 10137.01",
    "smi_transactiondate": "\/Date(1331622000000)\/",
    "smi_glamount2": 4.5792,
    "smi_transactionclass": 180870001,
    "smi_transactionclassname": "Residual Agent Commission",
    "smi_contractprodcutidname": "Traditional",
    "smi_agentid": "1d3f44ee-afc3-e011-addf-a4badb1ddef5",
    "smi_primaryagentid": "1d3f44ee-afc3-e011-addf-a4badb1ddef5"
},
{
    "merchantcontract": "Eds Overhead Doors 10150.01",
    "smi_transactiondate": "\/Date(1333695600000)\/",
    "smi_glamount2": 11.9300,
    "smi_transactionclass": 180870001,
    "smi_transactionclassname": "Residual Agent Commission",
    "smi_contractprodcutidname": "Traditional",
    "smi_agentid": "1d3f44ee-afc3-e011-addf-a4badb1ddef5",
    "smi_primaryagentid": "1d3f44ee-afc3-e011-addf-a4badb1ddef5"
}];
于 2012-04-06T23:57:52.460 回答