如何在 javascript ES6 中将 Map 作为对象获取?

How to get Map as an object in javascript ES6?

我的 Class 使用 es6 在节点级别创建地图对象, 使用 Map()--"set" function.When class 被调用 我希望地图对象转换为正常的 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 
}

现在 JavaScript 有 Object.fromEntries(在 ES2019 中添加,很容易填充),这是一个单行代码:

const obj = Object.fromEntries(map);

实例:

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);
.as-console-wrapper {
  max-height: 100% !important;
}


上一个答案:如果你有一个 Map 并且你想将它转换为普通对象,那很容易做到 if Map 的键是字符串或符号或可以有意义地转换为字符串的东西(例如数字)。

你只需遍历它的键:

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

实例:

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;
}

也就是说,作为 ,使用 entries 可能更有意义(而且您不需要 .entries(),您可以只使用 of map获取用于条目的默认迭代器)。

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

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

console.log(jsonResponse);

将 Map 转换为普通对象的一行代码:

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

尝试这个非常简单的方法可能会轻松解决您的问题。

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

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

Object.fromEntries(map);

注意:此函数是 ECMAScript 10 规范的一部分,受 Node.js 12+ 和 Chrome 73+ 支持,也可以使用此 [=12 填充以在旧平台上工作=]

const map = new Map();
// Setting up some sample data
map.set("foo", "bar");
map.set("pets", ["Fido", "Foobar", "Al"]);
// Convert map to object
const convertedMap = Object.fromEntries(map);

console.log(convertedMap);