egidiocs
egidiocs

Reputation: 2847

Collection: merge keys using lodash

how to achieve this using lodash?

I have this collection

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

and wanna transform into this:

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

thanks

Upvotes: 0

Views: 118

Answers (2)

Mikhail Shabrikov
Mikhail Shabrikov

Reputation: 8509

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/

Upvotes: 1

Jagdish Idhate
Jagdish Idhate

Reputation: 7742

You can do with .groupBy of array

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)

Upvotes: 0

Related Questions