如何将数组对象中的值转换为键实现数据重组?
数组对象结构转换方案
针对你需要将数组中对象的treatment值转为键、合并同date项的需求,直接通过分组映射的方式最简洁高效,不需要额外的删除再添加操作,具体实现如下:
实现代码
const data = [ { "date": "12/22", "treatment": "nausea", "count": 2 }, { "date": "12/23", "treatment": "cold", "count": 3 }, { "date": "12/22", "treatment": "cold", "count": 2 } ]; // 用临时对象按date分组 const dateGroups = {}; data.forEach(item => { const { date, treatment, count } = item; // 初始化该日期的分组对象 if (!dateGroups[date]) { dateGroups[date] = { date }; } // 将treatment转为键,count作为对应值 dateGroups[date][treatment] = count; }); // 把分组对象转为目标数组 const newData = Object.values(dateGroups); console.log(newData);
核心思路
- 用临时对象
dateGroups,以date的值作为键,存储每个日期对应的合并后对象 - 遍历原始数组时,判断当前
date是否已存在于临时对象中:- 不存在则创建新对象,仅包含
date属性 - 存在则直接给该对象添加
[treatment]: count的键值对
- 不存在则创建新对象,仅包含
- 最后通过
Object.values()将临时对象的所有值提取为数组,得到目标结构
这种方式只需要遍历一次原始数组,逻辑清晰且性能高效,避免了多次查找、增删操作带来的复杂度。
内容的提问来源于stack exchange,提问作者Shane K
相关产品推荐
相关产品推荐

