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

Kun*_*ist 5 javascript node.js ecmascript-6 es6-class

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

res.json(MapObject);
Run Code Online (Sandbox Code Playgroud)

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

{success:{},
 error:{},
redirectMe:false}
Run Code Online (Sandbox Code Playgroud)

有这样的地图对象

{
  success: 
   Map {
     'String1' => 'true',
     'Object1' => [ [Object],
                    [Object],
                    [Object],
                    [Object],
                    [Object]
                  ]
     'String2' => 100 
     }
  error: Map {},
  redirectMe: false 
}
Run Code Online (Sandbox Code Playgroud)

我想将结果作为对象获取,但是当我尝试获取它却无法获取任何内容时

想要类似的东西

{
  success: 
    {
     'String1' : 'true',
     'Object1' : [ [Object],
                    [Object],
                    [Object],
                    [Object],
                    [Object]
                  ]
     'String2' : 100 
     }
  error: {},
  redirectMe: false 
}
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 10

现在 JavaScript 已经Object.fromEntries(在 ES2019 中添加,很容易polyfill),这是一个单行:

const obj = Object.fromEntries(map);
Run Code Online (Sandbox Code Playgroud)

现场示例:

const obj = Object.fromEntries(map);
Run Code Online (Sandbox Code Playgroud)
const map = new Map();
map.set("string1", true);
map.set("someArray", [{a:1}, {b:2}, {c:3}]);
map.set("string2", 100);

const obj = Object.fromEntries(map);

console.log(obj);
Run Code Online (Sandbox Code Playgroud)


前面的回答:如果你有Map,你想将其转换为一个普通的对象,这是很容易做到,如果Map(,数字为例)的键是字符串或符号的东西,可以有意识地转换为字符串。

你只需循环它的键:

const obj = {};
for (const key of map.keys()) {
  obj[key] = map.get(key);
}
Run Code Online (Sandbox Code Playgroud)

现场示例:

.as-console-wrapper {
  max-height: 100% !important;
}
Run Code Online (Sandbox Code Playgroud)
const obj = {};
for (const key of map.keys()) {
  obj[key] = map.get(key);
}
Run Code Online (Sandbox Code Playgroud)

也就是说,正如Kunal 指出的那样,使用它可能更有意义entries(并且您不需要.entries(),您可以使用它of map来获取默认迭代器,即用于条目)。


Ema*_*lah 6

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

Object.fromEntries(map);
Run Code Online (Sandbox Code Playgroud)

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


Kun*_*ist 2

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

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

console.log(jsonResponse);
Run Code Online (Sandbox Code Playgroud)