名称对象/拆分为单独的对象或数组

时间:2016-04-07 04:23:43

标签: javascript arrays

我正在寻找一些关于我应该如何考虑这样做的一般性建议。

我需要做的是拿一个具有" 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,这些字符可以是您可以单击以显示以该字母开头的用户的链接。

非常感谢任何建议!

2 个答案:

答案 0 :(得分: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]]
}

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