2016-08-04 5 views
-2

У меня есть набор данных, возвращаемый из вызова AJAX, который содержит список пользователей и их роль в ассоциации с проектом.Javascript Найти и вставить элементы в массив

Пользователь может выполнять несколько ролей и, следовательно, находиться в результирующем наборе в разных местах.

Я пытаюсь создать объект 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 

Я знаю, что мой пример не так полезен, но, надеюсь, он показывает, что я пытаюсь выполнить здесь.

Обновление: Это объект, который сейчас выглядит, напечатан на консоли. Как вы можете видеть, один и тот же идентификатор находится там несколько раз с разными ролями.

Мне нужно иметь одного пользователя и их несколько ролей, которые они хранят. enter image description here

Не уверен, что правильное форматирование на это, но его, как я предполагаю, на выходе будет:

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

Просьба предоставить образцы данных для получения данных через Ajax, а затем предоставить точную структуру данных, которую вы хотите получить для этих же данных. – trincot

+0

Что такое '$ response.associatedUsers.users.user' и почему вы его обертываете в объект jQuery? – Jamiec

+0

Его набор результатов из нескольких пользователей – SBB

ответ

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); 
+0

Наконец-то об этом узнал, и он отлично работал. Я ценю ваш быстрый ответ! Рад, что вы поняли, что другие не смогли. – SBB

Смежные вопросы