我有一个从AJAX调用返回的数据集,其中包含用户列表及其与项目关联的角色。
用户可以拥有多个角色,因此可以在各个地方的结果集中。
我正在尝试创建一个Array / Object,我可以将用户第一次推送到他们的角色,然后只要再次看到该用户,它就会将他们的角色添加到他们现有的数组中。
例如,这是关闭我确定但它的概念..
var tempRoles = [];
// Loop over our users. If they are already in the array, just add their additional row.
$($response.associatedUsers.users.user).each(function(){
tempRoles.push({
QID: this.QID,
role: this.Role
})
});
最后,我需要列出所有单个用户,然后是他们拥有的所有角色的数组。
这就是我认为数组看起来像
Users <-- Object?
Bob123 <-- User Name
Roles <-- Array
Admin <-- Role
Mod <-- Role
Super Mod <-- Role
Jimmy456
Roles
Admin
Mod
唯一的问题是我需要采用一种格式,我可以直接查看用户并查看他们的角色。
users['Bob123'].roles
我知道我的例子不是很有用,但希望它能说明我在这里想要完成的事情。
更新 这就是对象现在看起来像打印到控制台的内容。正如您所看到的,相同的ID在那里有多次具有不同的角色。
不确定这个格式是否正确,但我认为输出结果如下:
users [
Bob123[
roles [
'admin', 'mod', 'superMod'
],
Jimmy456[
roles [
'admin', 'mod'
]
]
]
答案 0 :(得分:1)
您可以循环遍历数组并创建一个键入QID的对象。当你遍历它们时,如果用户已经存在于地图中,只需将角色推送到数组上。
var users = [
{QID:'user1', ROLE: 'role1'},
{QID:'user1', ROLE: 'role2'},
{QID:'user2', ROLE: 'role1'}
];
var userMap = {};
users.forEach(function(user) {
if (!userMap.hasOwnProperty(user.QID)) {
userMap[user.QID] = {QID:user.QID, roles:[]};
}
userMap[user.QID].roles.push(user.ROLE);
});
console.log(userMap);