我正在寻找一些关于我应该如何考虑这样做的一般性建议。
我需要做的是拿一个具有" 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 :(得分:4)
这是一种方法:
循环遍历对象,我们抓住第一个字母,检查我们的用户对象中是否有密钥,如果没有,我们创建一个并为其分配一个数组(包含用户数据),如果是,我们推送到那个数组:
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]]
}
答案 1 :(得分: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