- 运用扩展运算符
数组:
let a1 = [1,2,3];
let a2 = [...a1];
console.log(a2); // [1,2,3]
a2[1] = 4;
console.log(a1); // [1,2,3]
console.log(a2); // [1,4,3]
对象:
let a1 = {
name:'zs',
age:18
};
let a2 = {...a1};
console.log(a2); // {name:'zs',age:18}
a2.age = 4;
console.log(a1); // {name:'zs',age:18}
console.log(a2); // {name:'zs',age:4}
- 先通过JSON.stringify 把对象类型转成字符串类型再通过JSON.parse 把字符串转成对象
var obj = {
name: 'zs',
age: 18
}
var obj1 = JSON.stringify(obj); //“{name: 'zs',age: 18}”
obj1 = JSON.parse(obj2)
obj1.age = 4;
console.log(obj) //{name: 'zs',age: 18}
console.log(obj1) //{name: 'zs',age: 4}
- 封装深克隆方法(转换成基本数据类型)
function deepclone(params) {
var tmp
for(var key in params){
if(typeof params === 'object'){ //判断是否是引用数据类型
tmp=typeof Array.isArray() ? [] : {} //定义空的数组\对象
if(typeof params[key]==='object'){ //判断引用数据类型中是否还存在引用数据类型
tmp[key] = deepclone(params[key]) //若其自身存在引用数据类型则递归调用它自己
}else{
tmp[key]=params[key] //若其自身不存在引用数据类型则令空数组\对象中的每一项为输入的数组\对象中的每一项的值value(此时value均为基本数据类型)
}
}else{
tmp=obj//若不是引用数据类型则直接令空数组\对象等于其自身
}
}
return tmp
}
数组类型
var arry1=[1,2,3]
var arry2=deepclone(arry1)
arry2[0]=4
console.log(arry1) //[1,2,3]
console.log(arry2) //[4,2,3]
对象类型
var obj={
name:'zs',
age:18,
info:{
weight:'100',
height:'165'
}
}
var o1=deepclone(obj)
o1.info.weight='80'
console.log(obj) //{name:'zs',age:18,info:{weight:'100',height:'165'}}
console.log(o1) ////{name:'zs',age:18,info:{weight:'80',height:'165'}}
- 对象合并 浅拷贝
let obj3 = Object.assign(obj1, obj2)
转换为深拷贝(加一个空数组)
let obj4 = Object.assign({},obj1, obj2)