2016-04-07 9 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

これは、あなたがグループにしたい寸法は一緒に名前の最初の文字によって定義されている古典的な「GROUPBY」問題、です。 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]] 
} 
関連する問題