我有一个Map,其中键和值是json对象,例如
var myMap = new Map();
myMap.set('1', "mike");
myMap.set('2', "tom");
我如何通过重新构造对象模式(由于请求了api(将value
和fullame
映射到上面Map中的键和值,将其转换为对象数组
[{value : 1, fullName: "mike"},{value : 2, fullName: "tom"},...]
我试过使用
Array.from(myMap).map(arr => ({ value: arr[0], fullName: arr[1] }));
(注意,Array.from(myMap)
将以类似数组的数组的形式向您提供结果,使用属性名无法正常进行销毁
[[1, "tom", 28],[2, "mike", 30],...]
由于它将首先转换为嵌套对象数组,因此我必须通过映射索引找到id和名称,如arr[0]
给我value
,arr[1]
给我fullName
。。。
还有其他更好的方法吗?使用Lodash也欢迎在这里提出建议!
还有其他更好的方法吗?
您可以使用Array.from
的第二个参数而不是map
,并且可以对元组参数使用参数析构函数:
Array.from(myMap, ([value, fullName]) => ({ value, fullName }));
但是,没有办法手动构建具有自定义属性名称value
和fullName
的对象数组。
如果您想忽略id键而只获取值,请使用
Array.from(myMap.values())
默认迭代器同时生成元组。
我尝试过
Array.from(myMap).map(arr => ({ value: arr[0], name: arr[1] }));
,但它将转换为嵌套对象
似乎只缺少对入口元组的值部分的.name
属性访问,只获取名称字符串,而不是整个对象:
Array.from(myMap).map(arr => ({ value: arr[0], name: arr[1].name }));
// ^^^^^
您可以通过使用参数析构函数语法来简化
Array.from(myMap).map(([value, {name}]) => ({ value, name }));