目前我的数组看起来像
[{index: 1, value: 'A'},
{index: 1, value: 'B'},
{index: 2, value: 'C'},
{index: 5, value: 'D'}]
我试图将其变成像
这样的对象{
1: ['A', 'B'],
2: ['C'],
5: ['D']
}
目前我只是对数组进行排序,然后运行一个复杂的for循环
答案 0 :(得分:4)
您可以使用.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);

<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>
&#13;
您也可以避免多次操作,只能使用.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);
&#13;
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
&#13;
答案 1 :(得分:1)
@ Alexander的答案可能比这更明确,但我沉迷于partials并对匿名函数过敏,所以这里有部分版本!
var data = [
{index: 1, value: 'A'},
{index: 1, value: 'B'},
{index: 2, value: 'C'},
{index: 5, value: 'D'}
];
// define a couple of resuable functions for these objects
var getValueProp = _.partial(_.get, _, 'value');
var mapToValueProp = _.partial(_.map, _, getValueProp);
// get the answer!
var result = _(data)
.groupBy('index')
.mapValues(mapToValueProp)
.value();