拷贝数组
var arr = [1,'dd',123,'asjd'];
var copy = [];
for(var i = 0,len=arr.length;i<len;i++ ){
//将数组arr中的数据复制到数组copy中
copy[i] = arr[i];
}
//copy.push('我是改变的内容');
console.log(copy);
console.log(arr);
拷贝对象
var obj = {
name : 'dhjka',
age : 18
}
var copyObj = {...obj};
console.log(copyObj);
运行结果:
拷贝一层数组和对象
function deepCopy(){
var data = arguments[0];
var res;
console.log(data);
if(data.constructor === Array){
res = [...data];
}else if(data.constructor === Object){
res = [...data];
}else{
return -1;
}
return res;
}
var data = [1,2,34,4]
var arr1 = deepCopy(data);
arr1.push('新内容');
console.log(data);
console.log(arr1);
运行结果:
递归拷贝数组和对象
/**
* deepCopy(data)
* data可能是数组也可能是对象
* 1:判断data是数组 对象 或者其他类型数据
* 2:分别处理:如果是数据
* 声明空数组:接收被拷贝数组中的数: data[i]
* data[i]可能有数组或者对象
* 在经过一次深拷贝 deepCopy(data[i])
* 将处理后添加res res.push(deepCopy(data[i]))
* 3.如果是对象:
* 声明空对象接受拷贝数据中的数据
*/
function deepCopy(data){
//1.判断data是数组 对象 或者其他类型数据
if(data.constructor === Array){
//1.如果是数据
//2.声明空数组:接受被拷贝数组中的数据:data[i]
var res = [];
for(var i = 0;i<data.length;i++){
//data[i]:可能有数组或者对象
if(data[i] instanceof Object){
//如果是数组或者对象 在经过一次 深拷贝 将处理结果添加到res中
res.push(deepCopy(data[i]));
}else{
res.push(data[i]);
}
}
return res;
}else if(data.constructor === Object){
var res = {};
for(x in data){
if(data[i] instanceof Array){
res.push(deepCopy(data[i]));
}else{
res[x] = data[x];
}
}
return res;
}else{
return -1;
}
}
var arr = [1,2,4,{name : 'q',a:'asdlji'},''];
var res = deepCopy(arr);
console.log(arr);
console.log(res);
运行结果: