如何对未知unit取值的JS对象数组按unit属性分组排序
实现方案
可以用Array.prototype.reduce先按unit值分组,再根据需要对分组结果排序即可,不需要预先知道unit的所有可能取值:
基础分组代码
const array = [ { unit: 5, id: 'five'}, { unit: 200, id: 'some22'}, { unit: 100, id: 'recall'}, { unit: 5, id: 'some'}, ]; // 第一步:按unit值构建分组映射 const groupMap = array.reduce((map, item) => { // 不存在对应unit分组时先初始化空数组 if (!map.has(item.unit)) { map.set(item.unit, []) } map.get(item.unit).push(item) return map }, new Map()) // 第二步:转换为目标二维数组格式 const result = Array.from(groupMap.values())
如果需要分组按照unit的数值大小排序,新增一步key排序逻辑即可:
带unit升序的分组代码
const sortedResult = Array.from(groupMap.keys()) .sort((a, b) => a - b) // 要降序排序改为 b - a 即可 .map(unit => groupMap.get(unit))
运行带排序的代码后输出结果为:
[ [ { unit: 5, id: 'five' }, { unit: 5, id: 'some' } ], [ { unit: 100, id: 'recall' } ], [ { unit: 200, id: 'some22' } ] ]
内容的提问来源于stack exchange,提问作者Sara Ree
相关产品推荐
相关产品推荐

