2016-10-20 6 views
0

Есть массивLodash цепи и группеПо

var list = [ 
    {id: 1, name: 'name1', type: 'type1'}, 
    {id: 2, name: 'name2', type: 'type1'}, 
    {id: 3, name: 'name3', type: 'type1'}, 
    {id: 4, name: 'name4', type: 'type2'}, 
    {id: 5, name: 'name5', type: 'type3'}, 
    {id: 6, name: 'name6', type: 'type3'} 
]; 

Как я получаю следующее:

var obj = { 
type1: { 
    1: {id: 1, name: 'name1', type: 'type1'}, 
    2: {id: 2, name: 'name2', type: 'type1'}, 
    3: {id: 3, name: 'name3', type: 'type1'} 
}, 
type2: { 
    4: {id: 4, name: 'name4', type: 'type2'} 
}, 
type3: { 
    5: {id: 5, name: 'name5', type: 'type3'}, 
    6: {id: 6, name: 'name6', type: 'type3'} 
} 
}; 

Я пробовал:

_.chain(list).groupBy('type').value(); 

Но это оказалось только разбить массив типа.

ответ

0

Вы можете использовать reduce(), чтобы сделать это в чистом js.

var list = [ 
 
    {id: 1, name: 'name1', type: 'type1'}, 
 
    {id: 2, name: 'name2', type: 'type1'}, 
 
    {id: 3, name: 'name3', type: 'type1'}, 
 
    {id: 4, name: 'name4', type: 'type2'}, 
 
    {id: 5, name: 'name5', type: 'type3'}, 
 
    {id: 6, name: 'name6', type: 'type3'} 
 
]; 
 

 
var result = list.reduce(function(r, e, i) { 
 
    if(!r[e.type]) r[e.type] = {} 
 
    r[e.type][i+1] = e; 
 
    return r; 
 
}, {}) 
 

 
console.log(result)

+0

{[я + 1]: е} эта ошибка – user5671335

+0

Обновлено мой ответ. –

0

Может быть, вы можете сделать следующее;

var list = [ 
 
    {id: 1, name: 'name1', type: 'type1'}, 
 
    {id: 2, name: 'name2', type: 'type1'}, 
 
    {id: 3, name: 'name3', type: 'type1'}, 
 
    {id: 4, name: 'name4', type: 'type2'}, 
 
    {id: 5, name: 'name5', type: 'type3'}, 
 
    {id: 6, name: 'name6', type: 'type3'} 
 
    ], 
 

 
    result = list.reduce((p,c) => (p[c.type] === undefined ? p[c.type] = {[c.id]: c} 
 
                 : p[c.type][c.id] = c, p), {}); 
 
console.log(result);

Смежные вопросы