在 javascript 中浅拷贝 Map 和 Set 对象,而不会在每次复制时增加双倍内存



我正在使用 Map 数据结构,我需要在不加倍内存使用的情况下制作现有 Map 对象的精确副本。

如果我使用数组或常规对象而不是 Map,则可以通过 spread 运算符使用浅拷贝来完成此操作,这将允许我在内存中引用原始对象并根据需要使用额外的内存(仅当对新对象进行任何更改时(。

这是所需的行为,仅适用于 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的浅表副本。

Map.prototype.entries将返回一个迭代器,其中包含数组容器中的keyvalue

//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()]));
}

最新更新