lodash:计算对象数组中的值

Gid*_*ids 5 javascript lodash

我有一个像这样的对象数组:

[
{"question":"Q1","answer":"my answer 2"},
{"question":"Q1","answer":"my answer"}
{"question":"Q1","answer":"my answer"}
{"question":"Q2","answer":"answer 2"}
]
Run Code Online (Sandbox Code Playgroud)

我想按问题键分组并返回每个答案的计数。

例如

{
    "Q1": [{
        "answer": "my answer",
        "count": 2
    }, {
        "answer": "my answer 2",
        "count": 1
    }],
    "Q2": [{
        "answer": "answer 2",
        "count": 1
    }]
}
Run Code Online (Sandbox Code Playgroud)

,

我可以groupBy使用以下方法提问: .groupBy("question")并使用以下方法计算值的出现次数.countBy(),但我不确定如何结合分组和计数功能来实现所需的输出?

Fil*_*ype 7

您可以从 - 开始_.groupBy(array, 'question'),然后使用.map

例如:

var arr = [
{"question":"Q1","answer":"my answer 2"},
{"question":"Q1","answer":"my answer"},
{"question":"Q1","answer":"my answer"},
{"question":"Q2","answer":"answer 2"}
];

var result = _(arr)
  .groupBy('question')
  .map(function(item, itemId) {
    var obj = {};
    obj[itemId] = _.countBy(item, 'answer')
    return obj
  }).value();

console.log(JSON.stringify(result, null, 2));
Run Code Online (Sandbox Code Playgroud)

请参阅工作版本:http://jsbin.com/wixoronoqi/edit ?js,console

  • 我认为最好使用 [mapValues()](https://lodash.com/docs#mapValues) 而不是 [map()](https://lodash.com/docs#map),然后返回直接计算 [countBy()](https://lodash.com/docs#countBy) 值。 (5认同)