如何在Javascript中克隆/复制地图?
我知道如何克隆数组,但如何克隆/复制地图?
var myArray = new Array(1, 2, 3);
var copy = myArray.slice();
// now I can change myArray[0] = 5; & it wont affect copy array
// Can I just do the same for map?
var myMap = new ?? // in javascript is it called a map?
var myMap = {"1": 1, "2", 2};
var copy = myMap.slice();
Run Code Online (Sandbox Code Playgroud)
小智 237
随着JavaScript中的Maps的引入,考虑到构造函数接受一个iterable,这很简单:
var newMap = new Map(existingMap)
Run Code Online (Sandbox Code Playgroud)
文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
rob*_*rob 12
一种简单的方法(进行浅层复制)是将源映射的每个属性复制到目标映射:
var newMap = {};
for (var i in myMap)
newMap[i] = myMap[i];
Run Code Online (Sandbox Code Playgroud)
注意:newMap [i]很可能是与myMap [i]相同的对象的引用
小智 8
如果您需要制作地图的深层副本,可以使用以下命令:
new Map(JSON.parse(JSON.stringify(Array.from(source))));
Run Code Online (Sandbox Code Playgroud)
source原来的Map对象在哪里。
请注意,这可能并不适合 Map 值不可序列化的所有用例,有关更多详细信息,请参阅:/sf/answers/8589311/
克隆地图非常简单,因为您所谈论的只是一个对象。MapES6中有一个您应该查找的,但是要复制一个对象,只需使用Object.assign()
let map = {"a": 1, "b": 2}
let copy = Object.assign({}, map);
Run Code Online (Sandbox Code Playgroud)
您也可以cloneDeep()从Lodash 使用
let copy = cloneDeep(map);
Run Code Online (Sandbox Code Playgroud)
JQuery有一个扩展对象的方法(合并两个对象),但是这个方法也可以用来通过提供一个空对象来克隆一个对象.
// Shallow copy
var newObject = jQuery.extend({}, oldObject);
// Deep copy
var newObject = jQuery.extend(true, {}, oldObject);
Run Code Online (Sandbox Code Playgroud)
可以在jQuery文档中找到更多信息.
| 归档时间: |
|
| 查看次数: |
50001 次 |
| 最近记录: |