本文介绍如何将嵌套对象数组转换为结构化键值对数组。本文介绍如何将每个对象元素的键(日期)和值(计数)拆解为标准化的 `{ date: 'yyyy-mm-dd', count: 'x' }` 对象,并支持保留二维结构或展平为一维数组。
在实际开发中,我们常遇到类似 [{ '2025-06-02': 2, '2025-06-21': 6 }, { '2025-06-29': 2, '2025-06-23': 1 }] 这样的数据结构——即一个数组,其每个元素是一个以日期为键、数值为值的对象。但前端渲染(如时间序列图表、日历表格)通常需要更规范的结构:每个数据项为独立对象,明确包含 date 和 count 字段。
解决思路非常清晰:对原数组逐项处理,利用 Object.entries() 将每个对象转为 [key, value] 键值对
数组,再通过 .map() 映射为标准对象格式。关键代码如下:
const arrayWithDates = [
{ '2025-06-02': 2, '2025-06-21': 6 },
{ '2025-06-29': 2, '2025-06-23': 1 }
];
const arrayTransformed = arrayWithDates.map(record =>
Object.entries(record).map(([date, count]) => ({
count: String(count), // 确保 count 为字符串类型(按需求可改为 number)
date
}))
);
console.log(arrayTransformed);
// 输出:二维数组,保持原始分组结构✅ 输出结果:
[
[{ "count": "2", "date": "2025-06-02" }, { "count": "6", "date": "2025-06-21" }],
[{ "count": "2", "date": "2025-06-29" }, { "count": "1", "date": "2025-06-23" }]
]若需扁平化为单一列表(例如统一供列表组件或图表库消费),只需链式调用 .flat():
const flatTransformed = arrayWithDates
.map(record => Object.entries(record).map(([date, count]) => ({
count: String(count),
date
})))
.flat();
console.log(flatTransformed);
// 输出:一维数组,共 4 个对象⚠️ 注意事项:
此方法简洁、函数式、无副作用,适用于现代浏览器及 Node.js 环境(ES2017+),是处理“键即维度、值即指标”类数据的标准实践。