You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Lodash的groupBy方法将数组按元素首字母分组

实现方案

使用 Lodash 的 groupBy 即可完成核心分组逻辑,不需要强制配合 forEach 方法,搭配原生数组方法或 Lodash 自带的工具方法就能完成格式转换和字母排序。

基础实现(仅返回存在对应元素的字母分组)

const _ = require('lodash');
const words = ['Apple', 'Ape', 'Banana', 'Bag', 'Crab', 'Cupboard', 'Dog', 'Dare'];

// 1. 按首字母分组,统一转大写避免大小写差异导致分组错误
const groupedObj = _.groupBy(words, item => item[0].toUpperCase());

// 2. 对分组的key按字母表排序,转换为要求的数组格式
const result = Object.keys(groupedObj)
  .sort()
  .map(letter => ({ [letter]: groupedObj[letter] }));

console.log(result);

输出结果和你要求的示例完全一致。

扩展实现(适配所有26个英文字母)

如果需要包含全部26个字母,没有对应元素的分组返回空数组,可按以下方式实现:

const _ = require('lodash');
const words = ['Apple', 'Ape', 'Banana', 'Bag', 'Crab', 'Cupboard', 'Dog', 'Dare'];

const groupedObj = _.groupBy(words, item => item[0].toUpperCase());
// 生成A-Z的全字母数组
const allLetters = Array.from({length: 26}, (_, index) => String.fromCharCode(65 + index));

// 遍历全字母数组生成分组结果
const fullResult = allLetters.map(letter => ({ [letter]: groupedObj[letter] || [] }));

关于是否需要配合 forEach 的说明

仅完成该需求不需要使用 forEach,如果你的业务场景需要对每个分组做额外的遍历处理(比如统计分组内元素数量、修改元素内容等),可以搭配 Lodash 的 _.forEach 实现,效果和原生forEach一致。


内容的提问来源于stack exchange,提问作者bex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:54:02