👋 배열 엘리먼트 복사, copyWithin()


1. copyWithin()

  • 범위 값을 복사하여 같은 오브젝트에 설정
  • 두 번째 파라미터의 인덱스부터 복사하여

    • 첫 번째 파라미터 인덱스 부터 순서대로 설정(대체)
    const list = ['A', 'B', 'C', 'D', 'E'];
    const copy = list.copyWithin(1, 3);
    
    console.log(list); // [A,D,E,D,E]
    console.log(copy); // [A,D,E,D,E]
    
    // list 배열이 대상임
    // 두 번 째 파라미터의 3번 인덱스부터 배열의 끝까지 복사하여
    // 첫 번째 파라미터의 1번 인덱스 부터 차례로 설정
    // D와 E를 복사하므로 엘리먼트가 2개이며
    // 1번 인덱스부터 2개를 대체 하므로 B가, D로, C가 E로 대체됨
    // 복사 대상에 대체하므로 반환된 Array 오브젝트와 복사 대상이 같음
  • 세 번째 파라미터의 인덱스 직전까지 복사

    const list = ['A', 'B', 'C', 'D', 'E'];
    list.copyWithin(0, 2, 4);
    
    console.log(list); // [C, D, C, D, E]
    
    // 두 번째 파라미터의 2번 인덱스 부터
    // 세 번째 파라미터의 4번 인덱스 직전까지 복사하여 list 배열의 0번 인덱스부터 설정
    // 2번 인덱스, 3번 인덱스를 복사하므로 C와 D를 복사하게 됨
    // A가 C로, B가 D로 대체됨
  • 복사 시작 인덱스와 끝 인덱스를 작성하지 않으면 배열 전체 복사
const list = ['A', 'B', 'C', 'D', 'E'];
list.copyWithin(3); // [A,B,C,A,B]

// list 배열 전체가 복사 대상임
// 3번 인덱스부터 대체 함
// 복사할 엘리먼트 수가 대체할 엘리먼트 수보다 많으면
// 매치되는 인덱스만 값을 대체하고 남는 것은 대체하지 않음
// D가 A로, E가 A로 대체됨

2. copyWithin()

  • copyWithin() 함수의 특징

    • shallow copy(얕은 복사)
    • 같은 배열 안에서 이동하는 개념
    const list = ['A', { B: '가' }, 'C'];
    
    console.log(list.copyWithin(0, 1)); // [{B: "가"}, C, C]
    
    // {B: "가"}를 복사 할 때 새로운 {B: "가"}를 만들지 않고 현재의 메모리 주소를 복사함
    // shallow copy(얕은 복사)라고 함
    // shallow copy는 값이 연동됨
    // 연동되지 않도록 하려면 Deep Copy를 해야 함
    • 배열의 엘리먼트 수가 변동되지 않음
    • 배열 안에서 엘리먼트를 이동은 엘리먼트를 왼쪽, 오른쪽으로 이동하는 것(처리 속도가 빠름)