You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何将键值对对象映射转换为指定结构对象数组

问题场景

当前持有的源数据为普通键值对对象:

years = {1924:2, 1934: 10, 2010: 4}

需要转换为如下结构的对象数组:

years = [{year: 1924, items: 2}, {year: 1934, items: 10}, {year: 2010, items: 4}]

现有代码的核心问题有3个:

  • 目标结果是数组,初始化years2时用了空对象{},对象不存在push方法
  • 普通JS对象没有length属性,不能用带索引的for(i=0;i<len;i++)循环遍历
  • 普通对象遍历不会自动暴露$key这类变量,需要用专门的遍历语法拿到键和值
实现方案

新手友好:for...in 循环写法

for...in是JS原生支持的对象遍历语法,循环体内可以直接拿到当前遍历到的键名,再通过键名取对应值即可:

const years = {1924:2, 1934: 10, 2010: 4}
const years2 = [] // 初始化为空数组,用来存转换后的对象

for (const key in years) {
  years2.push({
    year: Number(key), // 对象的键默认是字符串,需要数字格式就做类型转换
    items: years[key] // 通过键名取对应的值
  })
}

简洁现代写法:Object.entries + map

Object.entries会把对象转成[键, 值]格式的二维数组,再调用数组的map方法直接映射成目标结构,代码更精简:

const years = {1924:2, 1934: 10, 2010: 4}
const years2 = Object.entries(years).map(([year, items]) => ({
  year: Number(year),
  items
}))

小提示:如果不需要year为数字类型,可以去掉Number()转换,直接用遍历拿到的key即可,JS中对象的数字键会被默认存储为字符串格式。

内容的提问来源于stack exchange,提问作者Ant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 12:51:24