javascript - 在 javascript 中浅复制 Map 和 Set 对象,而无需在每个副本上加倍内存
问题描述
我正在使用 Map 数据结构,我需要制作现有 Map 对象的精确副本,而不会使内存使用量加倍。
如果我要使用数组或常规对象而不是 Map,则可以使用浅拷贝通过扩展运算符来完成此操作,这将允许我引用内存中的原始对象并根据需要使用额外的内存(仅当有任何更改时新对象)。
这是所需的行为,仅适用于 Map 对象。
这是我尝试过的:
const shallowCopy = {
storage: Object.assign({}, this.database.storage), //copying Map object
counts: { ...this.database.counts },
};
上述方法似乎会导致一个空对象,并且无法成功将 Map 复制过来。
同样,这里的主要目标是创建与普通对象的浅拷贝等价物let foo = {...bar}
,只有我使用的是 Map 对象......在复制之后我应该能够调用常规的 Map 函数复制..不确定这是否可能。
我感谢任何建议,在此先感谢
解决方案
您可以使用该map.prototype.entries()
方法并将其传递给Map
构造函数以获取Map
.
将在数组容器中返回一个带有andMap.prototype.entries
的迭代器:key
value
//Sample Data
const childData = {
name: "john",
surname: "doe"
};
const data = {
foo: "bar",
baz: "foo",
child: childData
};
//Constructing Map from Object
const map = new Map(Object.entries(data));
//Shallow copying the map object to a new Map object
const shallowCopyMap = new Map(map.entries());
printMapAsJson(shallowCopyMap);
//Modifying the object ref
childData.name = "jane";
//Change is reflected as it is a shallow copy
printMapAsJson(shallowCopyMap);
function printMapAsJson(map) {
console.log(Object.fromEntries([...map.entries()]));
}
推荐阅读
- git - Git,克隆的裸仓库的路径不正确(缺少/)
- java - 线程“main”中的异常 java.lang.IllegalArgumentException:没有为 URI“http://xxx.xxx.xxx.xxx:xxxx”的方案“http”安装 NetworkModule
- kubernetes - Azure Kubernetes - Puppeteer 准备 PDF 错误:页面崩溃!在 Page._onTargetCrashed
- excel - 将 Access 表数据复制到 Excel 工作表
- angular - 从浏览器会话中复制 cookie
- rust - Rc::clone(&pointer) 如何增加引用计数?
- r - 如何使用 R 中的后缀组合变量对?
- python - 如何在 python 中将变量从一个 netcdf 文件添加到另一个 netcdf 文件?
- odoo - 继承 res.users 时出现混合苹果和橙子错误
- amazon-web-services - 自定义授权方 AWS CDK