Javascript查找并将项目推送到数组

时间:2016-08-04 15:20:34

标签: javascript jquery arrays

我有一个从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在那里有多次具有不同的角色。

我需要能够拥有一个用户及其拥有的多个角色。 enter image description here

不确定这个格式是否正确,但我认为输出结果如下:

users [
 Bob123[
  roles [
    'admin', 'mod', 'superMod'
  ],
  Jimmy456[
   roles [
     'admin', 'mod'
   ]
 ]
]

1 个答案:

答案 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);