如何将JavaScript Map转换为指定格式的对象数组?
问题:将Map转换为指定格式的对象数组
我得到了一个无法控制的键值对Map,需要将其转换为特定格式的对象数组。现有代码如下:
let paramArray1 = []; let paramArray2 = []; paramArray1.push({username:"test"}) paramArray1.push({password:"test"}) paramArray1.push({contentType:"application/json"}) let map = new Map(); map.set("username","test"); map.set("password","test"); map.set("contentType","application/json"); for (const [key,value] of map.entries()){ paramArray2.push({key,value}) } console.log(paramArray1); console.log(paramArray2);
运行上述代码后,两个数组包含相同数据,但paramArray2的格式与期望的paramArray1不符。我需要将Map的键值对转换为每个元素是{键名:值}格式的对象数组,而非{key:键名, value:值}的格式。我曾尝试将代码改为:
for (const [key,value] of map.entries()){ paramArray2.push({key:value}) }
但这会将"key"作为字面量键名,输出为[{key:test, key:test, key:application/json}],不符合需求。请问该如何解决?
解决方案
要实现这个需求,你需要使用JavaScript计算属性名(用方括号[]包裹变量),这样就能把变量key的值作为对象的键名,而非把"key"作为字面量键。
修改后的循环代码:
for (const [key, value] of map.entries()) { paramArray2.push({ [key]: value }); }
更简洁的写法(无需手动循环):
你也可以用Array.from或者扩展运算符结合map方法直接转换,代码更精简:
- 使用
Array.from:
const paramArray2 = Array.from(map, ([key, value]) => ({ [key]: value }));
- 使用扩展运算符+
map:
const paramArray2 = [...map].map(([key, value]) => ({ [key]: value }));
这样转换后,paramArray2的格式就和paramArray1完全一致了。
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

