首页 > 解决方案 > 是否可以从参数对象中的映射转换键值?

问题描述

我有一张地图,我在其中放置了这样的键值:

  for (let controller of this.attributiFormArray.controls) {
     
      attributiAttivitaMap.set(controller.get('id').value,  { value: controller.get('valoreDefault').value, mandatory: controller.get('obbligatorio').value })
  }

这是我设置后的地图:

0 : key: 10, value: {value: 200, mandatory: false}
1 : key: 102, value: {value: 300, mandatory: false}

好的,现在我的 porpuse 是创建一个这样的对象列表:

"valoriDefaultAttributiAttivita" : {
    "10" : {"value" : "200", "mandatory": false},
    "102" : {"value" : "300", "mandatory": false},

 }

其中数字“10”、“102”是我地图的键。

我尝试了几种方法,但是当我尝试将它放入数组中时,它不允许我像属性一样设置我的键值。

 let array: any[] = [];
 for(let key of attributiAttivitaMap.keys()){
    array.push({key: attributiAttivitaMap.get(key)});
 }

我怎么能做到这一点?

标签: angulartypescriptdictionary

解决方案


如果您的目标是获得相同的地图但以 js 对象的形式,您可以执行以下操作

const map = new Map<number, { value: number; mandatory: boolean }>();

map.set(10, { value: 200, mandatory: false });
map.set(102, { value: 300, mandatory: false });

const obj: Record<number, { value: number; mandatory: boolean }> = {};

map.forEach((val, key) => obj[key] = val);

或遍历地图条目

for(const [key, value] of map.entries()) {
  obj[key] = value;
}

游乐场链接


推荐阅读