2016-04-07 2 views
1

Я ищу общий совет о том, как я должен думать об этом.Объект имен/разделение на отдельные объекты или массивы

Что мне нужно сделать, это взять объект с именами «usernames»: userId и т. Д. И разделить их на отдельные объекты или массивы с каждым объектом, содержащим только имена пользователей, начинающиеся с определенной буквы.

Так что сейчас у меня есть:

allusers = {"adam292":10302, "alex92":12902, "briannv999":10302, "sandra127":11102, "sam11":100 } 

, но мне нужно, чтобы разделить их на свои собственные объекты или массивы, как следующее:

ausers = { "adam292":10302, "alex92":12902 } 

busers = { "briannv999":10302 } 

susers = {"sandra127":11102, "sam11":1002 } 

Я делаю это, потому что мне нужно, чтобы отобразить диалоговое окно, в котором также отображаются буквы a - z, которые будут ссылками, которые вы можете щелкнуть, чтобы отобразить пользователей, которые начинаются с этой буквы.

Любые советы очень ценятся!

+0

Это классическая «группиЙ» проблема, где размер вы хотите сгруппировать вместе определяются первым символом имени. Найдите SO или в другом месте для «JavaScript group by» или аналогичного. –

ответ

1

вы можете сделать это в цикле:

letter2users = {} 
for (var uname in allusers) { 
    if (!letter2users[uname[0]]) { 
     letter2users[uname[0]] = []; 
    } 

    letter2users[uname[0]].push(allusers[uname]); 
} 

# access this by using letter2users.a lettersusers.b 
4

Вот один из способов сделать это:

Working Fiddle

зацикливание через объект мы захватить первую букву и проверьте, если у нас есть ключ к этому в нашем объекте пользователей, если мы не делаем его и не назначаем ему массив (содержащий данные пользователя), если да, то мы нажимаем на этот массив:

var users = {}; 

for (var user in allusers) { 
    var firstLetter = user.slice(0,1); 
    if (users[firstLetter]) { 
    users[firstLetter].push([user, allusers[user]]); 
    } 
    else { 
    users[firstLetter] = [[user, allusers[user]]]; 
    } 
} 

Выход выше с помощью примера объекта коды заключается в следующем:

{ 
    a: [["adam292", 10302], ["alex92", 12902]], 
    b: [["briannv999", 10302]], 
    s: [["sandra127", 11102], ["sam11", 100]] 
}