Javascript查找项目并将其推入数组

Javascript查找项目并将其推入数组,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个从AJAX调用返回的数据集,其中包含一个用户列表及其与项目关联的角色 一个用户可以拥有多个角色,因此可以在不同的地方出现在结果集中 我正在尝试创建一个数组/对象,我可以在第一次将用户与其角色一起推入,然后每当它再次看到该用户时,它只会将其角色添加到现有数组中 举个例子,我敢肯定这有点离题,但这是个概念 var tempRoles = []; // Loop over our users. If they are already in the array, just add their

我有一个从AJAX调用返回的数据集,其中包含一个用户列表及其与项目关联的角色

一个用户可以拥有多个角色,因此可以在不同的地方出现在结果集中

我正在尝试创建一个数组/对象,我可以在第一次将用户与其角色一起推入,然后每当它再次看到该用户时,它只会将其角色添加到现有数组中

举个例子,我敢肯定这有点离题,但这是个概念

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
我知道我的例子没什么帮助,但希望它能说明我在这里要完成的事情

更新: 这就是对象现在的样子,打印到控制台上。如您所见,同一个ID多次出现在不同的角色中

我需要能够有一个用户和他们的多个角色,他们持有。

不确定此文件的格式是否正确,但我假设输出为:

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

您可以在数组上循环并创建一个由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);

请提供通过Ajax接收的示例数据,然后提供相同数据的确切数据结构。什么是
$response.associatedUsers.users.user
,为什么要将其包装在jQuery对象中?这是多用户的结果集。您的方法需要执行大量重复检查。相反,我会将角色视为用户下的属性。。。不是数组。角色可以是真的,也可以是假的。如果您需要动态推入属性,Javascript将支持该属性。protip:从控制台复制输出并将其粘贴到问题中-不要截屏!终于开始测试它,它工作得非常好。感谢您的快速回复!很高兴你明白了别人所不能理解的。
  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);