>웹 프론트엔드 >JS 튜토리얼 >JavaScript의 배열 복제 방법 소개(코드 포함)

JavaScript의 배열 복제 방법 소개(코드 포함)

不言
不言앞으로
2019-03-20 10:11:372724검색

이 글은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제