如何将JavaScript对象转换为包含单个键值对对象的数组?
解决方法:将对象转换为单个键值对对象组成的数组
嘿,这个转换真的超简单,给你两种常用的实现方式,都能快速得到你想要的days2数组:
方法1:使用Object.entries() + map()
这是ES6及以上版本最简洁的写法,Object.entries()会直接把对象拆成[键, 值]格式的二维数组,再通过map()把每个子数组转换成单个键值对的对象:
var days = { 0: 10, 1: 40, 2: 20, 3: 15, 4: 5, 5: 18, 6: 9 }; var days2 = Object.entries(days).map(([key, value]) => ({ [key]: value })); // 输出结果就是你要的:[ {0:10}, {1: 40}, {2: 20}, {3: 15}, {4: 5}, {5: 18}, {6: 9} ] console.log(days2);
这里用到了解构赋值([key, value])直接从子数组里取出键和值,再用计算属性名[key]来创建新对象的属性,一步到位。
方法2:兼容旧环境的Object.keys() + map()
如果你的运行环境不支持ES6的Object.entries(),可以用Object.keys()先获取对象所有的键,再遍历生成目标数组:
var days = { 0: 10, 1: 40, 2: 20, 3: 15, 4: 5, 5: 18, 6: 9 }; var days2 = Object.keys(days).map(key => ({ [key]: days[key] })); console.log(days2);
Object.keys(days)会返回对象所有键组成的数组["0", "1", "2", ..., "6"],然后每个键对应原对象的值,生成单个键值对的对象即可。
小提示
虽然原对象的键是数字,但JavaScript对象的属性名本质上都是字符串,不过这不影响你用数字去访问新数组里的对象属性(比如days2[0][0]和days2[0]["0"]都能拿到10),完全符合你的需求。
内容的提问来源于stack exchange,提问作者Albert
相关产品推荐
相关产品推荐

