Ya hay muchas respuestas maravillosas en este hilo. Sin embargo, quería compartir mi experiencia cuando intenté resolver "eliminar el enésimo elemento de la matriz" en el contexto de ES5.
Las matrices de JavaScript tienen diferentes métodos para agregar / eliminar elementos desde el inicio o el final. Estos son:
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
Esencialmente, ninguno de los métodos anteriores se puede usar directamente para eliminar el enésimo elemento de la matriz.
Un hecho que vale la pena señalar es que esto está en contraste con el uso del iterador de Java, que es posible eliminar el enésimo elemento de una colección mientras se itera.
Básicamente, esto nos deja con un solo método de matriz Array.splice
para realizar la eliminación del enésimo elemento (también hay otras cosas que podría hacer con estos métodos, pero en el contexto de esta pregunta, me estoy centrando en la eliminación de elementos):
Array.splice(index,1) - removes the element at the index
Aquí está el código copiado de la respuesta original (con comentarios):
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);
}
Otro método notable es Array.slice
. Sin embargo, el tipo de retorno de este método son los elementos eliminados. Además, esto no modifica la matriz original. Fragmento de código modificado de la siguiente manera:
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);
}
}
Dicho esto, aún podemos usar Array.slice
para eliminar el enésimo elemento como se muestra a continuación. Sin embargo, es mucho más código (por lo tanto, ineficiente)
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);
}
}
El Array.slice
método es extremadamente importante para lograr la inmutabilidad en la programación funcional à la redux