이 스레드에는 이미 훌륭한 답변이 많이 있습니다. 그러나 ES5 컨텍스트에서 "배열에서 n 번째 요소 제거"를 해결하려고 할 때 내 경험을 공유하고 싶었습니다.
JavaScript 배열에는 시작 또는 끝에서 요소를 추가 / 제거하는 다른 방법이 있습니다. 이것들은:
arr.push(ele) - To add element(s) at the end of the array
arr.unshift(ele) - To add element(s) at the beginning of the array
arr.pop() - To remove last element from the array
arr.shift() - To remove first element from the array
본질적으로 위의 방법 중 어느 것도 배열에서 n 번째 요소를 제거하는 데 직접 사용할 수 없습니다.
주목할만한 사실은 이것이 반복하는 동안 컬렉션의 n 번째 요소를 제거 할 수있는 Java 반복자의 사용과 대조적이라는 것입니다.
이것은 기본적으로 Array.splice
n 번째 요소 제거를 수행하는 배열 방법 을 하나만 남겨 둡니다 (이 방법 으로 수행 할 수있는 다른 작업도 있지만이 질문의 맥락에서 요소 제거에 중점을 둡니다).
Array.splice(index,1) - removes the element at the index
다음은 원래 답변 (주석 포함)에서 복사 한 코드입니다.
var arr = ["one", "two", "three", "four"];
var i = arr.length; //initialize counter to array length
while (i--) //decrement counter else it would run into IndexOutBounds exception
{
if (arr[i] === "four" || arr[i] === "two") {
//splice modifies the original array
arr.splice(i, 1); //never runs into IndexOutBounds exception
console.log("Element removed. arr: ");
} else {
console.log("Element not removed. arr: ");
}
console.log(arr);
}
또 다른 주목할만한 방법은 Array.slice
입니다. 그러나이 메소드의 리턴 유형은 제거 된 요소입니다. 또한 이것은 원래 배열을 수정하지 않습니다. 다음과 같이 수정 된 코드 스 니펫 :
var arr = ["one", "two", "three", "four"];
var i = arr.length; //initialize counter to array length
while (i--) //decrement counter
{
if (arr[i] === "four" || arr[i] === "two") {
console.log("Element removed. arr: ");
console.log(arr.slice(i, i + 1));
console.log("Original array: ");
console.log(arr);
}
}
그럼에도 불구하고 우리는 여전히 Array.slice
아래 표시된 것처럼 n 번째 요소를 제거 하는 데 사용할 수 있습니다. 그러나 훨씬 더 많은 코드입니다 (따라서 비효율적입니다)
var arr = ["one", "two", "three", "four"];
var i = arr.length; //initialize counter to array length
while (i--) //decrement counter
{
if (arr[i] === "four" || arr[i] === "two") {
console.log("Array after removal of ith element: ");
arr = arr.slice(0, i).concat(arr.slice(i + 1));
console.log(arr);
}
}
이 Array.slice
방법은 기능 프로그래밍에서 불변성을 달성하는 데 매우 중요합니다.