【问题标题】:Group an array by its first letter - using groupBy method (Lodash)按第一个字母对数组进行分组 - 使用 groupBy 方法 (Lodash)
【发布时间】:2022-01-01 06:42:17
【问题描述】:

我想根据第一个字母(按字母顺序)对数组进行分组,因此输出如下所示:

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,reduce 就是你所需要的。
  • Lodash 是首选,但也乐于接受 reduce()
  • 你不需要Object.values()
  • @Tvde1 要在 OPs 输出中获取数组,我会这样做。它不仅仅是一个对象

标签: javascript arrays object lodash


【解决方案1】:

使用 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);

【讨论】:

    猜你喜欢
    • 2022-05-22
    • 2022-11-22
    • 2021-02-18
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多