LHJ

I'm a FE developer.

13-6. Array 오브젝트(ES3 기준) / 엘리먼트 복사

02 Dec 2020 » js_beginner

13-6. Array 오브젝트(ES3 기준) / 엘리먼트 복사

slice()

구분데이터(값)
data대상
파라미터첫번째 파라미터: 시작 인덱스, 디폴트(0)
두번째 파라미터: 끝 인덱스opt, 디폴트(length)
반환[결과]

  • 배열의 일부를 복사하여 배열로 반환(다수를 반환한다는 뉘앙스가 포함되어 있습니다.)

    • 첫번째 파라미터의 인덱스부터 두번째 인덱스 직전까지
      끝 인덱스의 디폴트 값이 length이기 때문에 그렇습니다.
      length가 인덱스 값보다 +1 이므로 직전까지 반환해야됩니다.

        var origin = [1, 2, 3, 4, 5];
        var result = origin.slice(1, 3);
        console.log(result); // [2, 3]
        console.log(origin); // [1, 2, 3, 4, 5]
      
      1. 1번 인덱스부터 3번 인덱스 직전까지 복사
        즉, 1번과 2번을 복사
      2. 복사 대상 원본은 바뀌지 않습니다.

  • true, false를 숫자로 변환

      var value = [1, 2, 3, 4, 5];
      console.log(value.slice(true, 3)); // [2, 3]
      console.log(value.slice(false, 3)); // [1, 2, 3]
    

  • 첫번째 파라미터만 작성

      console.log([1, 2, 3, 4, 5].slice(2)); // [3, 4, 5]
    
    1. 첫번째 파라미터를 작성하고 두번째 파라미터를 작성하지 않으면
    2. 2번 인덱스부터 끝까지 반환

  • 첫번째 파라미터 값이 클 때

      console.log([1, 2, 3, 4, 5].slice(4, 3)); // []
    
    1. 첫번째 파라미터 값이 두번째 파라미터 값보다 크면
    2. 빈 배열을 반환합니다.

    앞에서 이런 경우가 있으면 4, 3 위치를 서로 바꾼 후에 메소드를 실행하기도 했었죠?
    여기서는 빈 배열을 반환합니다.


  • 파라미터에 음수 작성

      var value = [1, 2, 3, 4, 5];
      console.log(value.slice(-4, -2)); // [2, 3]
    
    1. 파라미터 값이 음수이면 length 값을 더합니다.
      -4 + 5 = 1
      -2 + 5 = 3
    2. 따라서 slice(1, 3)을 실행

이러한 조건들을 다 외울수는 없습니다.
앞에서 한번 설명을 드렸습니다만, 이런 것을 다 외울 수는 없고요,
slice() 메소드를 사용하실 때, MDN에서 검색해서 이러한 조건들을 체크해서 사용하시면 되겠구요,

그러나 반드시 이거는 기억하셔야됩니다.

배열의 일부를 복사하여 배열로 반환