如何对object构成的array按字母排序并合并相同letter的title项
JS数组合并排序实现方案
注意:你给出的目标输出中
{ letter: 'G', title: 'Cor', 'Car' }不符合JS对象语法规范,JS对象的单个键只能对应一个值,因此合理的实现是将同letter的多个title存入数组,单个title可保留字符串类型,以下方案基于该合法结构输出。
实现逻辑
- 先遍历原数组,用映射表聚合相同letter对应的所有title
- 将聚合后的映射表转为数组,按letter的字母顺序排序
- 格式化为最终需要的对象结构
完整代码
const originalArr = [ { letter: 'A', title: 'All' },{ letter: 'B', title: 'Business' }, { letter: 'G', title: 'Cor' }, { letter: 'G', title: 'Car' }, ]; // 聚合同letter的title const letterMap = {}; originalArr.forEach(item => { if (!letterMap[item.letter]) letterMap[item.letter] = []; letterMap[item.letter].push(item.title); }); // 排序并生成最终数组 const result = Object.entries(letterMap) .sort(([letterA], [letterB]) => letterA.localeCompare(letterB)) .map(([letter, titles]) => ({ letter, title: titles.length === 1 ? titles[0] : titles }));
输出结果
console.log(result) // 输出: // [ // { letter: 'A', title: 'All' }, // { letter: 'B', title: 'Business' }, // { letter: 'G', title: [ 'Cor', 'Car' ] } // ]
内容的提问来源于stack exchange,提问作者mirceaCapa
相关产品推荐
相关产品推荐

