簡體   English   中英

Lodash鏈和groupBy

[英]Lodash chain and groupBy

有一個數組

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();

但是事實證明,這只是打破了該類型的數組。

您可以在純js中使用reduce()做到這一點。

 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) 

可能您可以執行以下操作;

 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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM