2016-05-30 15 views
0

Wie erreichen Sie dies mit lodash?Sammlung: Zusammenführen von Schlüsseln mit lodash

Ich habe diese Sammlung

var orginal = [ 
{ idtsk:1, idevd:1 }, 
{ idtsk:1, idevd:2 }, 
{ idtsk:1, idevd:3 }, 
{ idtsk:2, idevd:4 }, 
{ idtsk:2, idevd:5 }, 
] 

und wollen in dieser Transformation:

var result = [ 
{ idtsk:1, idevd:[{Id:1},{Id:2},{Id:3}] }, 
{ idtsk:2, idevd:[{Id:4},{Id:5}] } 
] 

dank

Antwort

1
var arr = [ 
{ idtsk:1, idevd:1 }, 
{ idtsk:1, idevd:2 }, 
{ idtsk:1, idevd:3 }, 
{ idtsk:2, idevd:4 }, 
{ idtsk:2, idevd:5 }, 
]; 

var result = _(arr).groupBy('idtsk').map((item, key) => { 
    return { 
    idtsk: parseInt(key), 
    idevd: _(item).map((innerItem) => { 
     return { 
     id: innerItem.idevd 
     } 
    }).value() 
    } 
}).value(); 

console.log(result); 

https://jsfiddle.net/farq9dpp/1/

+0

Hallo, tks, aber das ist invertiert. Das Originalobjekt ist das flache Objekt! – egidiocs

+0

toll, ES6 rockt! – egidiocs

0

Sie mit .groupBy von Array tun können

var test = [ 
{ idtsk:1, idevd:1 }, 
{ idtsk:1, idevd:2 }, 
{ idtsk:1, idevd:3 }, 
{ idtsk:2, idevd:4 }, 
{ idtsk:2, idevd:5 }, 
] 

var groups = _.groupBy(test,'idtsk'); 
var result = Object.keys(groups).map(function(key){ 
    return { 
    idtsk:parseInt(key), 
    idevd:groups[key].map(function(x){ 
     return {Id:x.idevd}; 
    }) 
    } 
    }); 
console.log(result) 
+0

Hallo, tks, aber das in invertiert. Das Originalobjekt ist das flache Objekt! – egidiocs