再說這個之前與要先了解一下深拷貝:
首先深拷貝和淺拷貝只針對像 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){
//這是數(shù)組
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))