lodash groupBy 与数组长度

san*_*oon 1 lodash

我有一个原始数组,如下所示:

const original = [
    {
        type: 'foo'
    },
    {
        type: 'foo'
    },
    {
        type: 'bar'
    }
]
Run Code Online (Sandbox Code Playgroud)

然后我通过 lodash groupBy 和 iteratee 运行它,(val) => val.type得到:

{
  bar: [{
  type: "bar"
}],
  foo: [{
  type: "foo"
}, {
  type: "foo"
}]
}
Run Code Online (Sandbox Code Playgroud)

有没有一种 lodash 方法可以将每个键的属性转换/减少到它们的 Array.length 中?

{
  bar: 1,
  foo: 2
}
Run Code Online (Sandbox Code Playgroud)

Ori*_*ori 6

您可以使用_.countBy()直接获得结果:

const original = [{"type":"foo"},{"type":"foo"},{"type":"bar"}]

const result = _.countBy(original, 'type')

console.log(result)
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
Run Code Online (Sandbox Code Playgroud)

要在对数组进行分组后获得相同的结果,请使用_.mapValues(),并使用 获取每个子数组的长度_.size()

const original = [{"type":"foo"},{"type":"foo"},{"type":"bar"}]

const result = _.mapValues(
  _.groupBy(original, 'type'),
  _.size,
)

console.log(result)
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
Run Code Online (Sandbox Code Playgroud)