JavaScript如何按id分组对象数组 并将date、emi存入嵌套数组
问题核心改动说明
你现有代码的问题有两个:
- 用数组做映射存储分组结果,数字类型的
id会被识别为数组下标,导致下标为0的位置出现空值(也就是你输出开头的null) - 映射中存储的是同id的所有对象数组,而非按照预期合并为单个对象,将
date和emi收集到嵌套的date_emi数组中
调整后可直接运行的代码
// 用普通对象做id到聚合对象的映射 const objMap = {}; originalArray.forEach(element => { const makeKey = element.id; // 首次遇到该id时,初始化聚合对象的公共字段和空date_emi数组 if(!objMap[makeKey]) { objMap[makeKey] = { id: element.id, id_grid: element.id_grid, id_sector: element.id_sector, date_emi: [] }; } // 仅把当前项的date和emi推入对应id的date_emi数组 objMap[makeKey].date_emi.push({ emi: element.emi, date: element.date }); }); // 把映射对象的值提取为数组,就是预期输出结果 const expected_output = Object.values(objMap);
内容的提问来源于stack exchange,提问作者migueL
相关产品推荐
相关产品推荐

