js -- 참조 형식 Array -- 3. 배열 의 간단 한 복사 와 깊이 복사

6356 단어 javaScript
js 배열 도 매우 중요 한 부분 이기 때문에 배열 의 조작 등에 대해 시 리 즈 를 쓸 준 비 를 한다.1. 첫 번 째 부분 은 이원 수조 의 기초 지식 이다.http://blog.csdn.net/github_34514750 / article / details / 51049935 2. 두 번 째 부분 에서 배열 의 몇 가지 합병 방법 우열 비교 설명http://blog.csdn.net/github_34514750 / article / details / 51320982 3. 본 부분 은 배열 의 간단 한 복사 와 깊이 있 는 복 제 를 설명 합 니 다.
간단 한 복사 대상 에 대해 서 는 간단 한 = 복사, 즉 메모리 주 소 를 저장 한 것 일 뿐 완전히 복사 되 지 않 습 니 다. 이렇게 대상 을 수정 할 때 원래 대상 과 복사 대상 을 함께 수정 합 니 다.
깊이 복 제 는 복 제 를 수정 한 대상 이 원본 대상 에 영향 을 주지 않 습 니 다.
단순 복제
배열, 대상, 함수 등 참조 형식의 데이터 에 대해 등 호 는 완전히 복사 하 는 것 이 아니 라 메모리 주소 만 저장 합 니 다.
1. slice 또는 contcat 방법 으로 간단 한 복 제 를 실현 합 니 다.
간단 한 배열 은 다음 과 같다.
var arr1 = [1, 2, 3, 4],
arr2 = arr1.slice(0),
arr3 = arr1.concat();

console.log(arr1, arr2, arr3);//[1, 2, 3, 4] [1, 2, 3, 4] [1, 2, 3, 4],
arr2[2] = 10;
arr3[2] = 11;
console.log(arr1[2], arr2[2], arr3[2]); //3 10 11

대상 과 함수 또는 배열 이 있 는 배열 은 간단 한 값 이 함께 바 뀌 지 않 지만 인용 유형 은 원래 대상 과 복사 대상 이 함께 바 뀝 니 다.
var fun = function(log) {console.log},
arr1 = [1, 2, [3, 4], {a: 5, b: 6}, fun],
arr2 = arr1.slice(0),
arr3 = arr1.concat();

arr1[0] = 10;
arr3[2][1] = 5;
arr2[3].a = 100;

console.log(arr1, arr2, arr3);

js--引用类型Array--3.数组简单复制和深度复制_第1张图片
깊이 복사
1. jq 의 $. extend (true, target, obj) 를 사용 합 니 다.
var arr1 = [1, 2, [3, 4], {a: 5, b: 6}, 7],
arr2 = $.extend(true, [], arr1);

2. 깊이 있 는 복제 의 완전 실현
다 차원 배열 의 내장 및 배열 값 을 대상 으로 하 는 상황 을 고려 하여 다음 과 같은 원형 으로 확장 할 수 있 습 니 다.
newobj = Object.create(sourceObj)
Object.prototype.clone = function() {
    var obj = {};

    for(var i in this) {
        obj[i] = this[i];
    }

    return obj;
}

Array.prototype.clone = function() {
    var len = this.lenght,
        arr = [];

    for(var i = 0;i < len;i++) {
        if(typeof this[i] !== "object") {
            arr.push(this[i]);
        } else {
            arr.push(this[i].clone());
        }
    }
    return arr;
}

//  Object
var obj1 = {
    name: 'Rattz',
    age: 20,
    hello: function () {
        return "I'm " + name;
    }
};
var obj2 = obj1.clone();
obj2.age++;
console.log(obj1.age);//20

//  2 Array
var fun = function(log) {console.log},
arr1 = [1, 2, [3, 4], {a: 5, b: 6}, fun],
arr2 = arr1.clone();

3. JSON 방법 사용
newObj = JSON.parse(JSON.stringify(sourceObj));
var arr1 = [1, 2, [3, 4], {a: 5, b: 6}, 7],
    arr2 = JSON.parse(JSON.stringify(arr1));

console.log(arr1, arr2);//[1, 2, [3, 4], {a: 5, b: 6}, 7] [1, 2, [3, 4], {a: 5, b: 6}, 7],
arr2[1] = 10;
arr2[3].a = 20;
console.log(arr1[1], arr2[1]);//2 10
console.log(arr1[3], arr2[3]);//{a: 5, b: 6} {a:20,b:6}

좋은 웹페이지 즐겨찾기