集合:使用lodash合并密钥

时间:2016-05-30 12:33:51

标签: object collections lodash

如何使用lodash实现这一目标?

我有这个集合

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

并希望转变为:

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

感谢

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

您可以使用数组的.groupBy

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)