如何从JSON获取javascript中包含重复项的计数数?

如何从JSON获取javascript中包含重复项的计数数?,javascript,Javascript,我的JSON如下所示 var json = [ {"cardAid":"ALPHG","displayName":"ALPHG","SequenceNumber":"0","port":"A"}, {"cardAid":"ALPHG","displayName":"ALPHG","SequenceNumber":"1","port":"B"}, {"cardAid":"SFD","displayName":

我的JSON如下所示

var json =
         [
            {"cardAid":"ALPHG","displayName":"ALPHG","SequenceNumber":"0","port":"A"},
            {"cardAid":"ALPHG","displayName":"ALPHG","SequenceNumber":"1","port":"B"},
            {"cardAid":"SFD","displayName":"SFD","SequenceNumber":"2","port":"C"},
            {"cardAid":"SFD","displayName":"SFD","SequenceNumber":"3","port":"D"},
            {"cardAid":"ALPHG","displayName":"ALPHG","SequenceNumber":"4","port":"E"},
            {"cardAid":"ALPHG","displayName":"ALPHG","SequenceNumber":"5","port":"F"},
            {"cardAid":"BETA","displayName":"BETA","SequenceNumber":"6","port":"G"}
        ];
我使用代码从这个链接解析这个JSON,

但我需要基于JSON中的SequenceNumber的输出

{
  ALPHG: { Count: 2, Port: "A,B" },
  SFD: { Count: 2, Port: "C,D" },
  ALPHG: { Count: 2, Port: "E,F" },
  BETA: { Count: 1, Port: "G" }
}

如何根据JSON中的SequenceNumber将这个重复的名称放在映射中这可能接近您的想法(),我选择将端口作为数组而不是字符串。但我有点困惑,因为SequenceNumber在这个逻辑中没有影响,也许元素应该首先按SequenceNumber排序

function count(data) {
    var result = {};

    for (var i = 0; i < data.length; ++i) {
        var cardAid = data[i].cardAid;

        if (!(cardAid in result)) {
            result[cardAid] = [];
        }

        // Check if a new "sequence" needs to be created
        if (i == 0 || data[i-1].cardAid != cardAid) {
            result[cardAid].push({ Count: 0, Port: [] });
        }

        // Append item to the latest sequence
        var lastIndex = result[cardAid].length - 1;
        ++result[cardAid][lastIndex].Count;
        result[cardAid][lastIndex].Port.push(data[i].port);
    }

    return result;
}

所需的输出在第二个
ALPHG
对象后缺少逗号。此外,所需的输出无效,因为不能有两个同名的对象属性。它们只是相互覆盖,或者在您的解析器中,它看起来像是将它们连接在一起。更正了所需的输出权限,我不确定您想要什么。。。。如果您将CONN限制为2,然后将端口再次分组到另一个端口中,则可能会发生这种输出,这是您想要的吗?@AlvaroJoao同名的第二个对象属性将覆盖第一个对象属性。不能有两个同名的属性@War10ck我很抱歉,是一个输入错误->不是(真正的意思)谢谢提醒!这就是我需要的。。但我不想将该项附加到最新序列中。我想创建一个新的序列,例如:“ALPHG_1”:[{“Count”:2,“Port”:[“E”,“F”]},另一个尝试是使用对象键
“ALPHG_0”,“SFD_0”,“ALPHG_1”,“BETA_0”
。但我想在代码的其他部分使用它会更为棘手。
{
  ALPHG: { Count: 2, Port: "A,B" },
  SFD: { Count: 2, Port: "C,D" },
  ALPHG: { Count: 2, Port: "E,F" },
  BETA: { Count: 1, Port: "G" }
}
function count(data) {
    var result = {};

    for (var i = 0; i < data.length; ++i) {
        var cardAid = data[i].cardAid;

        if (!(cardAid in result)) {
            result[cardAid] = [];
        }

        // Check if a new "sequence" needs to be created
        if (i == 0 || data[i-1].cardAid != cardAid) {
            result[cardAid].push({ Count: 0, Port: [] });
        }

        // Append item to the latest sequence
        var lastIndex = result[cardAid].length - 1;
        ++result[cardAid][lastIndex].Count;
        result[cardAid][lastIndex].Port.push(data[i].port);
    }

    return result;
}
{
  "ALPHG": [
    {
      "Count": 2,
      "Port": [ "A", "B" ]
    },
    {
      "Count": 2,
      "Port": [ "E", "F" ]
    }
  ],
  "SFD": [
    {
      "Count": 2,
      "Port": [ "C", "D" ]
    }
  ],
  "BETA": [
    {
      "Count": 1,
      "Port": [ "G" ]
    }
  ]
}