按第一个字母对数组进行分组 - 使用 groupBy 方法 (Lodash)

Group an array by its first letter - using groupBy method (Lodash)

我想根据第一个字母(按字母顺序)对数组进行分组,因此输出看起来像这样:

const words = ['Apple', 'Ape', 'Banana', 'Bag', 'Crab', 'Cupboard', 'Dog', 'Dare'];

[
   { 'A' : [ 'Apple', 'Ape' ] },
   { 'B': [ 'Banana', 'Bag' ] },
   { 'C': [ 'Crab', 'Cupboard' ] },
   { 'D': [ 'Dog', 'Dare' ] }
]

我如何使用 groupBy Lodash 方法执行此操作?如果需要,它还可以扩展到字母表中的所有字母吗?你也会使用 forEach Lodash 方法吗?

提前致谢!

使用 lodash,您可以使用多种方法来获取它。

const words = ['Apple', 'Ape', 'Banana', 'Bag', 'Crab', 'Cupboard', 'Dog', 'Dare'];

const grouped = _.map(_.entries(_.groupBy(words, _.first)), ([k,v]) => ({[k]:v}))

console.log(grouped);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

与普通老JavaScript:

const words = ['Apple', 'Ape', 'Banana', 'Bag', 'Crab', 'Cupboard', 'Dog', 'Dare'];

const grouped = Object.values(words.reduce((acc,word) => (acc[word[0]] ??= {[word[0]]: []}, acc[word[0]][word[0]].push(word), acc), {}))

console.log(grouped);