Javascript如何对数组对象按品牌分组并修改参数名实现格式转换
实现方案
这种分组聚合类的数组转换需求,优先使用Array.prototype.reduce()实现,它可以在遍历过程中直接累积分组结果,比单独用map的实现逻辑更简洁高效。
完整可运行代码如下:
const mobiles = [ { BRAND_NAME: 'Samsung', MODEL_NAME: 'Galaxy Note 9', MANUFACTURE_DATE: '2021-11-02' }, { BRAND_NAME: 'Samsung', MODEL_NAME: 'Galaxy S10', MANUFACTURE_DATE: '2021-10-02' }, { BRAND_NAME: 'Apple', MODEL_NAME: 'Iphone X', MANUFACTURE_DATE: '2020-11-02' } ]; const groupResult = Object.values(mobiles.reduce((acc, current) => { const currentBrand = current.BRAND_NAME; // 不存在对应品牌分组时先初始化 if (!acc[currentBrand]) { acc[currentBrand] = { brandname: currentBrand, details: [] }; } // 字段重命名后加入对应分组的详情列表 acc[currentBrand].details.push({ modelname: current.MODEL_NAME, manufacturedate: current.MANUFACTURE_DATE }); return acc; }, {})); console.log(groupResult);
上述代码执行后输出的结果和你要求的目标格式完全匹配。
逻辑说明
- 首先用
reduce遍历原数组,以品牌名为key临时存储分组结果,天然避免重复创建相同品牌的分组项 - 遍历过程中直接完成字段名的转换,把原大写下划线命名的字段映射为你需要的小写命名字段
- 最后调用
Object.values()把存储分组的临时对象转换为数组,得到最终结果
如果后续有更多字段需要转换,也可以提前定义字段映射表,批量处理字段重命名逻辑,不需要手动逐个写映射关系。
内容的提问来源于stack exchange,提问作者neil
相关产品推荐
相关产品推荐

