このスレッドにはすでに多くのすばらしい答えがあります。ただし、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番目の要素の削除を実行するための配列メソッドを1つだけ残します(これらのメソッドで実行できる他の処理もありますが、この質問のコンテキストでは、要素の削除に焦点を当てています)。
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);
}
もう1つの注目すべき方法は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
方法は、関数型プログラミングで再プログラミングの不変性を実現するために非常に重要です。