如何从JSON获取javascript中包含重复项的计数数?
我的JSON如下所示如何从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":
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" ]
}
]
}