이 글은 JavaScript(코드 포함)의 배열 복제 방법을 소개합니다. 필요한 친구들이 참고할 수 있기를 바랍니다.
js는 주로 기본 데이터 유형과 참조 데이터 유형
의 두 가지 범주로 나뉩니다. 기본 데이터 유형에는 숫자, 문자열, 정의 취소, null, 부울, 기호(es6의 새로운 기능)
참조 데이터 유형: 객체 , 배열, 함수, 데이터 등
참고: 기본 데이터 유형은 스택 공간에 배치되고 값으로 저장되며 직접 읽고 조작할 수 있습니다.
참조 데이터 유형은 **힙 공간**(게이트)에 저장됩니다. 변수의 값은 실제로 힙 공간의 주소(키)를 가리키므로 이 변수를 복제하면 열쇠.
let arr = [1,2,3,4,5] let arr1 = arr // 这一步相当于把arr栈空间的地址赋给了arr1,其实arr和arr1操作的是同一个堆空间的对象 arr1.push(6) // arr1 = [1,2,3,4,5,6] console.log(arr) //[1,2,3,4,5,6]
따라서 참조 유형 복사의 경우 힙 공간의 객체를 복사해야 합니다
arrayshallowcopy
1. 배열 슬라이스 및 concat 메소드를 사용하여 새 배열의 특성
let arr = [1,2,3,4,5] let arr1 = arr.slice() //[1,2,3,4,5] let arr2 = arr.concat() //[1,2,3,4,5]을 반환합니다.
2. 간단하고 조잡한 방법 - 순회
let arr = [1,2,3,4,5] let arr2 = [] arr.forEach(item=>{ arr2.push(item) } ) console.log(arr2)
3.es6 새로운 방법 - 확장 연산자
let arr = [1,2,3,4,5] let arr1 = [...arr] //[1,2,3,4,5]
4.es6 새로운 방법 -Object.sign
let arr = [1,2,3,4,5]
let arr1 = []
Object.sign(arr1,arr)
console.log(arr1) //[1,2,3.4,5]
배열과 객체가 배열에 중첩된 경우 얕은 복사는 배열만 복사합니다. 또는 스택 공간의 주소 address에 저장된 객체이므로 이전 배열과 새 배열에서 이 주소가 가리키는 객체를 변경하더라도 두 배열 이 모두 변경됩니다. 따라서 이러한 배열을 복사하려면 깊은 복사가 필요합니다.
Array deep copy
1. 일반 순회, 참조 유형으로 순회할 때 참조 유형을 복사합니다
let arr = [1,2,3,4,5,{name:'bob'},['a','b']] function clone (arr) { let arr1 = [] arr.forEach(item=>{ //如果不是object,将该值插入到新数组 if(typeof(item) !== 'object') { arr1.push(item) } else { //根据遍历的对象新建一个相同类型的空对象 let obj = item instanceof Array ? [] : {} for(var key in item){ if(item.hasOwnProperty(key)){ obj[key] = item[key] } } arr1.push(obj) } }) return arr1 } let arr1 = clone(arr) arr1[5].name = 'js' console.log(arr,'arr',arr1,'arr1')
2. 단순하고 조잡합니다(배열과 객체는 복사할 수 있지만 함수는 복사할 수 없음)
let arr = [1,2,3,4,5,{name:'bob'},['a','b']] let arr1 = JSON.parse(JSON.stringify(arr))
이 글은 여기서 끝납니다. 더 흥미로운 콘텐츠를 보려면 PHP 중국어 웹사이트의 JavaScript 튜토리얼 비디오 칼럼을 주목하세요!
위 내용은 JavaScript의 배열 복제 방법 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!