浅拷贝
浅拷贝数组
let arr = [1, 2, 3];
let arr1 = arr.slice();
let arr2 = arr.concat();
let arr3 = [...arr];
let arr4 = [];
arr.forEach(e => {
arr4.push(e);
});
let arr5 = [];
for (i = 0; i < arr.length; i++) {
arr5.push(arr[i]);
}
浅拷贝对象
let obj = {
a: 1,
b: 2
}
let obj1 = Object.assign({}, obj);
let obj2 = { ...obj };
let obj3 = {};
for (let e in obj) {
obj3[e] = obj[e];
}
let obj4 = {};
Object.keys(obj).forEach(e => {
obj4[e] = obj[e];
});
深拷贝
- 手写递归函数
var obj = {
id: 1,
name: '张三',
msg: {
age: 18
},
color: ['pink', 'red']
}
var o = {};
function deepClone(newobj, oldobj) {
for (var k in oldobj) {
var item = oldobj[k];
if (item instanceof Array) {
newobj[k] = [];
deepClone(newobj[k], item);
} else if (item instanceof Object) {
newobj[k] = {};
deepClone(newobj[k], item);
} else {
newobj[k] = item;
}
}
}
deepClone(o, obj);
function deepClone(obj) {
let objClone = Array.isArray(obj) ? [] : {};
if(obj && typeof obj === "object") {
for(let key in obj) {
if(obj.hasOwnProperty(key)) {
if(obj[key] && typeof obj[key] === "object") {
objClone[key] = deepClone(obj[key]);
} else {
objClone[key] = obj[key];
}
}
}
}
return objClone
}
-
JSON.parse(JSON.stringify())
let arr = [1, 3, {
username: ' kobe'
}];
let arr1 = JSON.parse(JSON.stringify(arr));
let arr = [1, 3, {
username: ' kobe'
},function(){}];
let arr4 = JSON.parse(JSON.stringify(arr));
arr4[2].username = 'duncan';
console.log(arr, arr4);
-
jQuery.extend()方法
var $ = require('jquery');
var obj1 = {
a: 1,
b: { f: { g: 1 } },
c: [1, 2, 3]
};
var obj2 = $.extend(true, {}, obj1);
console.log(obj1.b.f === obj2.b.f);
-
函数库lodash的_.cloneDeep方法
var _ = require('lodash');
var obj1 = {
a: 1,
b: { f: { g: 1 } },
c: [1, 2, 3]
};
var obj2 = _.cloneDeep(obj1);
console.log(obj1.b.f === obj2.b.f);