再说这个之前与要先了解一下深拷贝:
首先深拷贝和浅拷贝只针对像 Object, Array 这样的复杂对象的。简单来说,浅拷贝只复制一层对象的属性,而深拷贝则递归拷贝了所有层级,如下:
var china = {
nation : '中国',
birthplaces:['北京','上海','广州'],
skincolr :'yellow',
friends:['sk','ls']
}
//深复制,要想达到深复制就需要用递归
function deepCopy(o,c){
var c = c || {}
for(var i in o){
if(typeof o[i] === 'object'){
//要考虑深复制问题了
if(o[i].constructor === Array){
//这是数组
c[i] =[]
}else{
//这是对象
c[i] = {}
}
deepCopy(o[i],c[i])
}else{
c[i] = o[i]
}
}
return c
}
而如何转化为简单对象呢?如下:
var arr = {a:1,b:2,g:{c:8,d:5},p:[{q:1,w:2},{q:2,w:3}]};
var array = [];
function deepCopy(p,c,index) {
var flag = false;
if (p.constructor === Array) {
flag = true;
};
for (var i in p) {
if (typeof p[i] === 'object') {
if(flag){
deepCopy(p[i],array,i);
}else{
deepCopy(p[i],array,index);
}
} else {
if(index){
c[i+'['+index+']'] = p[i];
}else{
c[i] = p[i];
}
}
}
return c;
}
console.log(deepCopy(arr,array))