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
相关产品推荐
相关产品推荐

