首页 > 解决方案 > 具有数组长度的 lodash groupBy

问题描述

我有一个看起来像这样的原始数组:

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

然后我通过 lodash groupBy 与 iteratee 运行它(val) => val.type以获得:

{
  bar: [{
  type: "bar"
}],
  foo: [{
  type: "foo"
}, {
  type: "foo"
}]
}

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

{
  bar: 1,
  foo: 2
}

标签: lodash

解决方案


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

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

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

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

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

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

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

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


推荐阅读