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번 인덱스부터 3번 인덱스 직전까지 복사
즉, 1번과 2번을 복사 - 복사 대상 원본은 바뀌지 않습니다.
- 1번 인덱스부터 3번 인덱스 직전까지 복사
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]
- 첫번째 파라미터를 작성하고 두번째 파라미터를 작성하지 않으면
- 2번 인덱스부터 끝까지 반환
첫번째 파라미터 값이 클 때
console.log([1, 2, 3, 4, 5].slice(4, 3)); // []
- 첫번째 파라미터 값이 두번째 파라미터 값보다 크면
- 빈 배열을 반환합니다.
앞에서 이런 경우가 있으면 4, 3 위치를 서로 바꾼 후에 메소드를 실행하기도 했었죠?
여기서는 빈 배열을 반환합니다.
파라미터에 음수 작성
var value = [1, 2, 3, 4, 5]; console.log(value.slice(-4, -2)); // [2, 3]
- 파라미터 값이 음수이면 length 값을 더합니다.
-4 + 5 = 1
-2 + 5 = 3 - 따라서 slice(1, 3)을 실행
- 파라미터 값이 음수이면 length 값을 더합니다.
이러한 조건들을 다 외울수는 없습니다.
앞에서 한번 설명을 드렸습니다만, 이런 것을 다 외울 수는 없고요,
slice() 메소드를 사용하실 때, MDN에서 검색해서 이러한 조건들을 체크해서 사용하시면 되겠구요,
그러나 반드시 이거는 기억하셔야됩니다.
배열의 일부를 복사하여 배열로 반환