如何在JavaScript ES6中将Map作为对象?

时间:2017-05-10 11:00:50

标签: javascript node.js ecmascript-6 es6-class

我的类正在使用es6在节点级别创建一个地图对象, 使用Map() - “set”函数。当调用类时,我希望地图对象转换为普通的json类型结构。我正在使用moongoose从数据库中检索数据。

res.json(MapObject);

使用此res.json后,父节点内的整个内容变空。

{success:{},
 error:{},
redirectMe:false}

像这样拥有地图对象

{
  success: 
   Map {
     'String1' => 'true',
     'Object1' => [ [Object],
                    [Object],
                    [Object],
                    [Object],
                    [Object]
                  ]
     'String2' => 100 
     }
  error: Map {},
  redirectMe: false 
}

我希望将结果作为对象,但是当我试图让它无法得到任何东西时

想要像

这样的东西
{
  success: 
    {
     'String1' : 'true',
     'Object1' : [ [Object],
                    [Object],
                    [Object],
                    [Object],
                    [Object]
                  ]
     'String2' : 100 
     }
  error: {},
  redirectMe: false 
}

5 个答案:

答案 0 :(得分:2)

将地图转换为对象的更好方法

let jsonResponse = {};
            for(let [key,val] of MapObject.entries()){
                jsonResponse[key]= val;
            }

console.log(jsonResponse);

答案 1 :(得分:2)

将Map转换为普通对象的单行:

Object.assign({}, ...[...m.entries()].map(([k, v]) => ({[k]: v})))

答案 2 :(得分:1)

如果您有一个Map,并且想要将其转换为普通对象,则可以轻松完成如果 Map的键是字符串或符号或其他内容(例如,可以有意义地转换为字符串的数字。

如果是这样,你只需循环其键:

const map = new Map();
map.set("string1", true);
map.set("someArray", [{a:1}, {b:2}, {c:3}]);
map.set("string2", 100);

const obj = {};
for (const key of map.keys()) {
  obj[key] = map.get(key);
}

console.log(obj);
.as-console-wrapper {
  max-height: 100% !important;
}

答案 3 :(得分:1)

您可以使用本机JS函数轻松将地图转换为对象:

Object.fromEntries(map);

注意:此功能是EcmaScript 10规范的一部分,Node.js 12+和Chrome 73+支持此功能

答案 4 :(得分:0)

尝试这个非常简单可以轻松解决您的问题。

resp.send(JSON.stringify(MapObject));