Array의 prototype인 slice(), splice()는
이름부터 비슷한..배열을 다루는 함수들인데 차이점을 알아보자
✅ [참고] Array.prototype.slice() - JavaScript - MDN Web Docs
✅ [참고] Array.prototype.splice() - JavaScript - MDN Web Docs
.slice(begin, end)
: [begin, end) 에 대한 얕은 복사본을 새로운 배열 객체로 반환 (🚨 원본 배열 수정 ❌)// example
const numbers = [1, 2, 3, 4, 5];
console.log(numbers.slice(0, 2)); // [1, 2]
console.log(numbers.slice(-3, -1)); // [3, 4]
console.log(numbers.slice(undefined, 4)); // [1, 2, 3, 4]
console.log(numbers.slice(6)); // []
console.log(numbers.slice(2)); // [3, 4, 5]
console.log(numbers.slice(3, 6)); // [4, 5]
.splice(start[, deleteCount[, item1[, item2[, ...]]]])
: 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경 (🚨 원본 배열 자체를 수정 ⭕)array.length - start
보다 클 경우 → start부터 모든 요소를 제거// example
const numbers = [1, 2, 3, 4, 5];
// 2번 인덱스부터 3개의 요소를 삭제하고 "a", "b", "c"를 추가
const eliminated = numbers.splice(2, 3, "a", "b", "c");
console.log(eliminated); // [3, 4, 5]
console.log(numbers); // [1, 2, 'a', 'b', 'c']
// 맨 마지막 인덱스부터 0개의 요소를 삭제하고 "d"를 추가
const noElimination = numbers.splice(-1, 0, "d");
console.log(noElimination); // []
console.log(numbers); // [1, 2, 'a', 'b', 'c', 'd']
String의 prototype인 slice(), substr(), substring()은 모두 문자열을 잘라주는 기능을 하고, 원본 문자열을 수정하지 않고 새로운 문자열을 반환한다. 단, arguments 등에 있어서 조금씩 차이점이 존재한다
[참고] String.prototype.slice() - JavaScript - MDN Web Docs
[참고] String.prototype.substr() - JavaScript - MDN Web Docs
[참고] String.prototype.substring() - JavaScript - MDN Web Docs
.substr(start[, length])
const str = "dianestar";
console.log(str.substr(0, 5)); // diane
console.log(str.substr(-4)); // star
console.log(str.substr(-10)); // dianestar
.substring()
.slice(indexStart, indexEnd)
👉 Array.prototype.slice()
, 그리고 String.prototype.substring()
과 유사!substring()
은 indexStart 값과 indexEnd 값을 바꾸어서 처리slice()
는 빈 문자열 ""을 반환substring()
은 음수 값을 0으로 처리slice()
는 뒤에서부터 인덱스 카운팅const str = "dianestar";
str.substring(5, 0); // 'diane' -> str.substring(0, 5); 처럼 동작
str.slice(5, 0); // '' -> 범위를 벗어났다고 판단하여 빈 문자열 반환
str.substring(-4); // 'dianestar' -> str.substring(0); 처럼 동작
str.slice(-4); // 'star' -> 뒤에서부터 (-1 부터) 인덱스 카운팅