如何使用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
相关产品推荐
相关产品推荐

