我有一个JSON对象,它具有重复的电子邮件属性,如下所示:
accounts": [
{
"email": "somebody@domain.com",
"accountID": 1,
"accountName": "Account Name",
"permission": "Permission 1",
"nodeID": 1
},
{
"email": "somebody@domain.com",
"accountID": 1,
"accountName": "Account Name",
"permission": "Permission 2",
"nodeID": 2
}]
JSON包含我想要分组的重复电子邮件字段。所需的结果JSON如下:
{
“email” : ”somebody@domain.com”,
“accountID” : 1,
“accountName” : “Account Name”,
“permissions” : [
{
“permission” : “Permission 1”,
“nodeID” : 1
},
{
“permission” : “Permission 2”,
“nodeID” : 2
}
]
}
因此,通过这种方式,生成的JSON不会包含多个具有相同电子邮件属性的项目。
有没有办法用jQuery实现这个?
提前致谢。
答案 0 :(得分:1)
使用forEach
循环可以非常轻松地完成此操作:
var source = {accounts: [
{
"email": "somebody@domain.com",
"accountID": 1,
"accountName": "Account Name",
"permission": "Permission 1",
"nodeID": 1
},
{
"email": "somebody@domain.com",
"accountID": 1,
"accountName": "Account Name",
"permission": "Permission 2",
"nodeID": 2
}]};
var groups = {};
source.accounts.forEach(function(item) {
if (!groups.hasOwnProperty(item.email)) {
groups[item.email] = {
email : item.email,
accountID : item.accountID,
accountName: item.accountName,
permissions: []
};
}
groups[item.email].permissions.push({
permission: item.permission,
nodeID: item.nodeID
});
});
alert(JSON.stringify(groups));

我们创建一个空对象,然后循环遍历原始数组。对于数组中的每个项目,我们检查是否已经收到此电子邮件,如果没有,我们会将其与accountID
和accountName
一起插入到对象中,然后我们为权限创建一个空数组。然后我们只是将权限添加到数组中。
你最终得到一个看起来像这样的对象:
{
"somebody@domain.com": {
"email": "somebody@domain.com",
"accountID": 1,
"accountName": "Account Name",
"permissions": [
{
"permission": "Permission 1",
"nodeID": 1
},
{
"permission": "Permission 2",
"nodeID": 2
}
]
}
}
使用每个电子邮件地址的密钥。如果需要,可以使用for...in
循环遍历它。