2017-04-13 13 views
-1

これはおそらくダウンホートされますが、JSはまだ私にとって新しい獣です。だから私は、一意のキーは、姓の巣への手紙になりたいユニークなキーでJS内に入れ子になったオブジェクトを作成する

[ A: [ 
     {"id": 28, "name": "Ackerman, William"}, 
     {"id": 18, "name": "Anderson, Sherry"}, 
    ], 
    B: [ 
     {"id": 42, "name": "Barry, Tristan"}, 
     {"id": 33, "name": "Baker, Lionel"}, 
    ], 
    C: [ 
     {"id": 79, "name": "Chen, Amy"}, 
     {"id": 21, "name": "Chen, Benjamin"}, 
     {"id": 86, "name": "Cornish, Jezebel"} 
    ] 
    ..... 
] 

:私は、DBからデータオブジェクトを得ているし、それはJSの配列オブジェクトにこのようなものを整理したいと思いますグループ内の姓の人のリスト。私はユニークな文字を隔離するだけで、各キーの下に名前のリストを置くことになると失われてしまいます。もちろん

var list = []; 
for(var i=0; i< employees.length; i++) { 
    var key = employees[i].firstletter; 
    var obj = {"id": employees[i].employee_id, "name": employees[i].last_name + ', '+ employees[i].first_name}; 
    var name = []; 
    name.push(obj); 
    list[key] = name;   
} 

これだけ私に、各グループの最後の結果を与える...

+0

だけでなく、生のデータを追加してください。 –

+0

最初のコードブロックの構文が正しくない。fwiw:配列表記で英数字キーが使用できない。それは単なる値リストです。英数字キーが必要な場合は、普通のオブジェクト初期化子( '{}')を使います。基本的に、外側の '[]'は '{}'でなければなりません。 – Pointy

答えて

0

問題は、すべての従業員のためにname配列を再作成していることです。その代わりに、すでにkey(従業員の頭文字)の配列が作成されている場合は、それを再利用してください。そこにない場合は、新しいものを作成します。

var list = []; 
for(var i=0; i< employees.length; i++) { 
    var key = employees[i].firstletter; 
    var obj = {"id": employees[i].employee_id, "name": employees[i].last_name + ', '+ employees[i].first_name}; 
    var name = list[key] || []; 
    name.push(obj); 
    list[key] = name;   
} 

undefined結果は(listオブジェクトがkeyが含まれていないときにlist[key]で何を得る)「falsy」であるので、name変数が代入されますので、これは動作しますその場合は空の配列。

0

グループ化するオブジェクトを使用して、配列をArray#forEachで繰り返すことができます。

var data = [{ id: 28, firstname: 'William', lastname: 'Ackerman' }, { id: 18, firstname: 'Sherry', lastname: 'Anderson' }, { id: 42, firstname: 'Tristan', lastname: 'Barry' }, { id: 33, firstname: 'Lionel', lastname: 'Baker' }, { id: 79, firstname: 'Amy', lastname: 'Chen' }, { id: 21, firstname: 'Benjamin', lastname: 'Chen' }, { id: 86, firstname: 'Jezebel', lastname: 'Cornish' }], 
 
    grouped = Object.create(null); 
 

 
data.forEach(function (a) {    
 
    grouped[a.lastname[0]] = grouped[a.lastname[0]] || []; 
 
    grouped[a.lastname[0]].push({ id: a.id, name: [a.lastname, a.firstname].join(', ') }); 
 
}); 
 

 
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題