Lodash从重复的对象键创建集合

Min*_*Vox 3 javascript arrays object lodash

我有以下结构:

var output = [{
    "article": "BlahBlah",
    "title": "Another blah"
}, {
    "article": "BlahBlah",
    "title": "Return of the blah"
}, {
    "article": "BlahBlah2",
    "title": "The blah strikes back"
}, {
    "article": "BlahBlah2",
    "title": "The blahfather"
}]
Run Code Online (Sandbox Code Playgroud)

从上面使用优雅的lodash单线开始,我需要创建以下结构。

var newOutput = [{
    "article": "BlahBlah",
    "titles": ["Another blah", "Return of the blah"]
}, {
   "article": "BlahBlah2",
   "titles": ["The blah strikes back", "The blahfather"]
}]
Run Code Online (Sandbox Code Playgroud)

非常感谢您一如既往地提供帮助。.对于解决方案的工作原理的解释非常有用。

4ca*_*tle 6

使用_.groupBy然后_.map将所得对象转换为对象数组。

var newOutput = _(output)
    .groupBy('article')
    .map(function(v, k){ return { article: k, titles: _.map(v, 'title') } })
    .value();
Run Code Online (Sandbox Code Playgroud)

var newOutput = _(output)
    .groupBy('article')
    .map(function(v, k){ return { article: k, titles: _.map(v, 'title') } })
    .value();
Run Code Online (Sandbox Code Playgroud)
var output = [{"article":"BlahBlah","title":"Another blah"},{"article":"BlahBlah","title":"Return of the blah"},{"article":"BlahBlah2","title":"The blah strikes back"},{"article":"BlahBlah2","title":"The blahfather"}];

let newOutput = _(output)
    .groupBy('article')
    .map(function(v, k){ return { article: k, titles: _.map(v, 'title') } })
    .value();

console.log(newOutput);
Run Code Online (Sandbox Code Playgroud)

借助ES6箭头功能,

var newOutput = _(output)
    .groupBy('article')
    .map((v, k) => ({ article: k, titles: _.map(v, 'title') }))
    .value();
Run Code Online (Sandbox Code Playgroud)