js -- 참조 형식 Array -- 3. 배열 의 간단 한 복사 와 깊이 복사
6356 단어 javaScript
간단 한 복사 대상 에 대해 서 는 간단 한 = 복사, 즉 메모리 주 소 를 저장 한 것 일 뿐 완전히 복사 되 지 않 습 니 다. 이렇게 대상 을 수정 할 때 원래 대상 과 복사 대상 을 함께 수정 합 니 다.
깊이 복 제 는 복 제 를 수정 한 대상 이 원본 대상 에 영향 을 주지 않 습 니 다.
단순 복제
배열, 대상, 함수 등 참조 형식의 데이터 에 대해 등 호 는 완전히 복사 하 는 것 이 아니 라 메모리 주소 만 저장 합 니 다.
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);
깊이 복사
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}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
js -- 참조 형식 Array -- 3. 배열 의 간단 한 복사 와 깊이 복사본 부분 은 배열 의 간단 한 복사 와 깊이 있 는 복 제 를 설명 합 니 다. 간단 한 복사 대상 에 대해 서 는 간단 한 = 복사, 즉 메모리 주 소 를 저장 한 것 일 뿐 완전히 복사 되 지 않 습 니 다. 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.