js配列またはオブジェクトの深度コピーと浅いコピー関数パッケージ
1736 ワード
浅いコピー
浅いコピーとは、引用だけをコピーして本物の値をコピーしないということです.同じ住所を指していますが、修正すると元のオブジェクトにも影響があります.
方法:
1.
2.配列の浅いコピーは、一般的にslice、concatを使用します.
3.配列が浅いコピー-エルゴード.
4.対象は浅いコピー-Object.assign()です.
5.オブジェクトの浅いコピー-拡張演算子
関数パッケージ
コンセプト:深くコピーするということは目標に対しての完全コピーであり、浅いコピーのように引用をコピーしただけで、値までコピーしました.変更時に元のオブジェクトは影響を受けません.
方法:
1.
関数パッケージ
浅いコピーとは、引用だけをコピーして本物の値をコピーしないということです.同じ住所を指していますが、修正すると元のオブジェクトにも影響があります.
方法:
1.
=
で値演算子を割り当てて、浅いコピーを実現する.2.配列の浅いコピーは、一般的にslice、concatを使用します.
3.配列が浅いコピー-エルゴード.
4.対象は浅いコピー-Object.assign()です.
5.オブジェクトの浅いコピー-拡張演算子
関数パッケージ
//
function shallowCopy(objOrArr){
var type = objOrArr instanceof Array ? 'arr' : 'obj'
var newObjOrArr = objOrArr instanceof Array ? [] : {}
if(type === 'arr'){
newObjOrArr=[].concat(objOrArr)
}else{
for(var key in objOrArr){
if(objOrArr.hasOwnProperty(key)){
newObjOrArr[key]= objOrArr[key]
}
}
}
return newObjOrArr
}
コピーコンセプト:深くコピーするということは目標に対しての完全コピーであり、浅いコピーのように引用をコピーしただけで、値までコピーしました.変更時に元のオブジェクトは影響を受けません.
方法:
1.
JSON
オブジェクト中のparse
およびstringify
を利用する.2.
は、再帰性を利用して、各レイヤがオブジェクトを再作成し、値を付与することを実現する.関数パッケージ
//
function deepCopy(objOrArr) {
var type = objOrArr instanceof Array ? 'arr' : 'obj'
var newObjOrArr = objOrArr instanceof Array ? [] : {}
if (type === 'arr') {
newObjOrArr = JSON.parse(JSON.stringify(objOrArr))
} else {
for (var key in objOrArr) {
if (objOrArr.hasOwnProperty(key)) {
newObjOrArr[key] = typeof objOrArr[key] === 'object' ? deepCopy(objOrArr[key]) : objOrArr[key]
}
}
}
return newObjOrArr
}