如何对JavaScript对象数组按orderSeries字段进行条件分组
JavaScript数组按指定规则分组实现方案
该需求完全可以实现,具体实现逻辑和代码如下:
实现思路
- 用临时映射表存储非null的
orderSeries对应的分组信息,避免重复遍历 - 遍历原数组时对
orderSeries为null和非null的元素做分支处理 - 非null的相同
orderSeries元素合并,将model和year存入cars数组,null值元素直接保留原有结构
完整实现代码
var list = [{ 'orderSeries': 26342, 'make': 'audi', 'model': 'r8', 'year': '2012' }, { 'orderSeries': 26342, 'make': 'audi', 'model': 'rs5', 'year': '2013' }, { 'orderSeries': null, 'make': 'ford', 'model': 'mustang', 'year': '2012' }, { 'orderSeries': null, 'make': 'ford', 'model': 'fusion', 'year': '2015' }, { 'orderSeries': null, 'make': 'kia', 'model': 'optima', 'year': '2012' }]; // 分组核心逻辑 const groupMap = {}; const result = []; list.forEach(item => { const { orderSeries, make, model, year } = item; // orderSeries为null直接保留原结构 if (orderSeries === null) { result.push(item); return; } // 非null值按orderSeries分组 if (!groupMap[orderSeries]) { // 不存在对应分组则新建分组对象 const group = { orderSeries, make, cars: [] }; groupMap[orderSeries] = group; result.push(group); } // 把当前车辆信息加入分组的cars数组 groupMap[orderSeries].cars.push({ model, year }); }); // 替换原数组(按需使用) list = result; console.log(list);
补充说明
代码时间复杂度为O(n),仅需遍历原数组一次即可完成分组,效率较高。如果业务场景中相同orderSeries对应的make可能不一致,可以根据实际需求调整逻辑,比如保留首次出现的make、或者新增校验逻辑。
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

