使用lodash _.groupBy格式化json对象时出现问题

时间:2017-03-31 13:12:01

标签: json ecmascript-6 lodash

我无法重新格式化对象以按列表分组。

// input 
{
    'M': [
        {name: Bob, id: 1},
        {name: John, id: 2},
        {name: John, id: 3},
    ],
    'F': [
        {name: Liz, id: 4},
        {name: Mary, id: 5},
        {name: Mary, id: 6},
    ]
}

// desired output
{
    'M': [
        'Bob': [ {name: Bob, id: 1},]
        'John': [ {name: John, id: 2}, {name: John, id: 3} ]
    ],
    'F': [
        'Liz': [ {name: Liz, id: 4} ]
        'Mary': [ {name: Mary, id: 5}, {name: Mary, id: 6} ]
    ]
}

我目前的剧本只返回' M'关键,我不是造成它的原因

for (var key in obj) {
    var data = _.groupBy(obj[key], 'name')
    return data;
}

我也试过

  Object.keys(obj).forEach(obj, key => {
    var data = _.groupBy(obj[key], 'name')
    return data;
  }) 

但它会抛出TypeError: #<Object> is not a function

2 个答案:

答案 0 :(得分:3)

您可以使用mapValues按照groupBy的名称对每个性别群体进行分组。

var output = _.mapValues(input, names => _.groupBy(names, 'name'));

&#13;
&#13;
var input = {
    'M': [
        {name: 'Bob', id: 1},
        {name: 'John', id: 2},
        {name: 'John', id: 3},
    ],
    'F': [
        {name: 'Liz', id: 4},
        {name: 'Mary', id: 5},
        {name: 'Mary', id: 6},
    ]
};

var output = _.mapValues(input, names => _.groupBy(names, 'name'));

console.log(output);
&#13;
body > div { min-height: 100%; top: 0; }
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

使用_.forOwn,因为你想迭代它自己的属性。

_.forOwn(obj, function(key, val) {
    var ret = {};
    ret[key] = _.groupBy(val, 'name');
    return ret;
});