js配列またはオブジェクトの深度コピーと浅いコピー関数パッケージ

1736 ワード

浅いコピー
浅いコピーとは、引用だけをコピーして本物の値をコピーしないということです.同じ住所を指していますが、修正すると元のオブジェクトにも影響があります.
方法:
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
        }