如何基于对象嵌套属性name对数组元素分组生成二维数组
实现方案
你可以借助Map结构完成动态分组,不需要提前预判name的所有可能取值,实现逻辑如下:
const array1 = [{data: '...', name: 'a'}, {data: '...', name: 'b'}, {data: '...', name: 'a'}, {data: '...', name: 'c'}, {data: '...', name: 'c'}, {data: '...', name: 'b'}]; const groupMap = new Map(); // 遍历原数组完成分组 array1.forEach(item => { const currName = item.name; // 不存在该name的分组则初始化 if (!groupMap.has(currName)) { groupMap.set(currName, []); } // 将当前项推入对应分组 groupMap.get(currName).push(item); }); // 提取Map的所有值转为数组,就是目标二维数组 const array2 = Array.from(groupMap.values());
如果需要分组结果按照name的字典序排序,可以增加排序逻辑:
const array2Sorted = Array.from(groupMap.entries()) // 按name字段排序 .sort((entryA, entryB) => entryA[0].localeCompare(entryB[0])) // 提取分组后的子数组部分 .map(entry => entry[1]);
内容的提问来源于stack exchange,提问作者Sheen
相关产品推荐
相关产品推荐

