我可以使用Lodash来“折叠”对象数组吗?

use*_*856 3 javascript lodash

目前我的数组看起来像

[{index: 1, value: 'A'},
 {index: 1, value: 'B'},
 {index: 2, value: 'C'},
 {index: 5, value: 'D'}]
Run Code Online (Sandbox Code Playgroud)

我正在尝试将其变成类似

{
  1: ['A', 'B'],
  2: ['C'],
  5: ['D']
}
Run Code Online (Sandbox Code Playgroud)

目前,我只是对数组进行排序,然后运行一个复杂的for循环

Ale*_* T. 5

您可以使用.groupBy+ .mapValues+.map

var data = [{
  index: 1, value: 'A'
}, {
  index: 1, value: 'B'
}, {
  index: 2, value: 'C'
}, {
  index: 5, value: 'D'
}];

var result = _(data)
  .groupBy('index')
  .mapValues(function (el) {
    return _.map(el, 'value');
  })
  .value();

console.log(result);
Run Code Online (Sandbox Code Playgroud)
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.0.0/lodash.js"></script>
Run Code Online (Sandbox Code Playgroud)

也可以避免多次操作,只能.reduce像这样使用

var data = [{
  index: 1, value: 'A'
}, {
  index: 1, value: 'B'
}, {
  index: 2, value: 'C'
}, {
  index: 5, value: 'D'
}];

var result = data.reduce(function (prev, current) {
  if (typeof (prev[current.index]) === 'undefined') {
    prev[current.index] = [];
  }
 	
  return prev[current.index].push(current.value) && prev;
}, {});
console.log(result);
Run Code Online (Sandbox Code Playgroud)
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
Run Code Online (Sandbox Code Playgroud)