Pregunta Eliminar elementos de la matriz en JavaScript - Eliminar vs empalmes


¿Cuál es la diferencia entre usar el delete operador en el elemento de matriz en lugar de utilizar el Array.splice método?

Por ejemplo:

myArray = ['a', 'b', 'c', 'd'];

delete myArray[1];
//  or
myArray.splice (1, 1);

¿Por qué incluso tengo el método de empalme si puedo eliminar elementos de la matriz como puedo con los objetos?


1173
2018-02-01 11:11


origen


Respuestas:


delete eliminará la propiedad del objeto, pero no reindexará la matriz ni actualizará su longitud. Esto hace que parezca indefinido:

> myArray = ['a', 'b', 'c', 'd']
  ["a", "b", "c", "d"]
> delete myArray[0]
  true
> myArray[0]
  undefined

Tenga en cuenta que, de hecho, no se establece en el valor undefined, más bien, la propiedad se elimina de la matriz, por lo que es Aparecer indefinido Las herramientas de desarrollo de Chrome dejan clara esta distinción al imprimir empty al iniciar sesión en la matriz.

> myArray[0]
  undefined
> myArray
  [empty, "b", "c", "d"]

myArray.splice(start, deleteCount) en realidad elimina el elemento, reindexa la matriz y cambia su longitud.

> myArray = ['a', 'b', 'c', 'd']
  ["a", "b", "c", "d"]
> myArray.splice(0, 2)
  ["a", "b"]
> myArray
  ["c", "d"]

1539
2018-02-01 11:16



Método Array.remove ()

John Resig, el creador de jQuery creo una muy útil Array.remove método que siempre uso en mis proyectos.

// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};

y aquí hay algunos ejemplos de cómo se podría usar:

// Remove the second item from the array
array.remove(1);
// Remove the second-to-last item from the array
array.remove(-2);
// Remove the second and third items from the array
array.remove(1,2);
// Remove the last and second-to-last items from the array
array.remove(-2,-1);

El sitio web de John


321
2018-03-22 00:51



Como eliminar solo elimina el objeto del elemento en la matriz, la longitud de la matriz no cambiará. Splice elimina el objeto y acorta la matriz.

El siguiente código mostrará "a", "b", "indefinido", "d"

myArray = ['a', 'b', 'c', 'd']; delete myArray[2];

for (var count = 0; count < myArray.length; count++) {
    alert(myArray[count]);
}

Mientras que esto mostrará "a", "b", "d"

myArray = ['a', 'b', 'c', 'd']; myArray.splice(2,1);

for (var count = 0; count < myArray.length; count++) {
    alert(myArray[count]);
}

95
2018-02-01 11:13



Me encontré con esta pregunta al tratar de entender cómo eliminar cada aparición de un elemento de una matriz. Aquí hay una comparación de splice y delete para eliminar cada 'c' desde el items Formación.

var items = ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'];

while (items.indexOf('c') !== -1) {
  items.splice(items.indexOf('c'), 1);
}

console.log(items); // ["a", "b", "d", "a", "b", "d"]

items = ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'];

while (items.indexOf('c') !== -1) {
  delete items[items.indexOf('c')];
}

console.log(items); // ["a", "b", undefined, "d", "a", "b", undefined, "d"]
​

60
2018-05-09 13:25



De  Referencia básica de JavaScript 1.5> Operadores> Operadores especiales> eliminar operador :

Cuando elimina un elemento de matriz, el   la longitud de la matriz no se ve afectada. por   ejemplo, si elimina un [3], a [4] es   aún un [4] y un [3] no está definido. Esta   se mantiene incluso si elimina la última   elemento de la matriz (eliminar   a [a.length-1]).


13
2018-02-01 11:16



splice trabajará con índices numéricos.

mientras delete puede usarse contra otro tipo de índices.

ejemplo:

delete myArray['text1'];

9
2018-01-11 07:52



Probablemente también valga la pena mencionar que el empalme solo funciona en arreglos. (No se puede confiar en que las propiedades del objeto sigan un orden consistente).

Para eliminar el par clave-valor de un objeto, eliminar es lo que realmente desea:

delete myObj.propName;     // , or:
delete myObj["propName"];  // Equivalent.

9
2017-08-01 20:11



borrar actúa como una situación del mundo no real, simplemente elimina el artículo, pero la longitud de la matriz permanece igual:

ejemplo desde el terminal del nodo:

> var arr = ["a","b","c","d"];
> delete arr[2]
true
> arr
[ 'a', 'b', , 'd', 'e' ]

Aquí hay una función para eliminar un elemento de una matriz por índice, utilizando rebanada(), toma el arr como el primer arg y el índice del miembro que desea eliminar como el segundo argumento. Como puede ver, en realidad elimina el miembro de la matriz y reducirá la longitud de la matriz en 1

function(arr,arrIndex){
    return arr.slice(0,arrIndex).concat(arr.slice(arrIndex + 1));
}

Lo que hace la función anterior es llevar a todos los miembros al índice y a todos los miembros después del índice y concatenarlos juntos, y devuelve el resultado.

Aquí hay un ejemplo que usa la función anterior como módulo de nodo, ya que el terminal será útil:

> var arr = ["a","b","c","d"]
> arr
[ 'a', 'b', 'c', 'd' ]
> arr.length
4 
> var arrayRemoveIndex = require("./lib/array_remove_index");
> var newArray = arrayRemoveIndex(arr,arr.indexOf('c'))
> newArray
[ 'a', 'b', 'd' ] // c ya later
> newArray.length
3

tenga en cuenta que esto no funcionará en una matriz con engaños, porque indexOf ("c") solo obtendrá la primera ocurrencia, y solo empalmará y eliminará la primera "c" que encuentre.


7
2017-07-20 02:20



Como se dijo muchas veces arriba, usando splice() parece un ajuste perfecto. Documentación en Mozilla:

los splice() método cambia el contenido de una matriz mediante la eliminación de elementos existentes y / o la adición de nuevos elementos.

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];

myFish.splice(2, 0, 'drum'); 
// myFish is ["angel", "clown", "drum", "mandarin", "sturgeon"]

myFish.splice(2, 1); 
// myFish is ["angel", "clown", "mandarin", "sturgeon"]

Sintaxis

array.splice(start)
array.splice(start, deleteCount)
array.splice(start, deleteCount, item1, item2, ...)

Parámetros

comienzo

Índice en el que comenzar a cambiar la matriz. Si es mayor que la longitud de la matriz, el índice de inicio real se establecerá a la longitud de la matriz. Si es negativo, comenzará con muchos elementos desde el final.

deleteCount

Un número entero que indica la cantidad de elementos de matriz antiguos para eliminar. Si deleteCount es 0, no se eliminan elementos. En este caso, debe especificar al menos un elemento nuevo. Si deleteCount es mayor que la cantidad de elementos que quedan en la matriz desde el inicio, todos los elementos hasta el final de la matriz se eliminarán.

Si se omite deleteCount, deleteCount será igual a (arr.length - start).

item1, item2, ...

Los elementos para agregar a la matriz, comenzando en el índice de inicio. Si no especifica ningún elemento, splice() solo eliminará elementos de la matriz.

Valor de retorno

Una matriz que contiene los elementos eliminados. Si solo se elimina un elemento, se devuelve una matriz de un elemento. Si no se eliminan elementos, se devuelve una matriz vacía.

[...]


7
2018-01-08 10:43



eliminar Vs empalme

cuando elimina un elemento de una matriz

var arr = [1,2,3,4]; delete arr[2]; console.log(arr)
//result
[1, 2, 3:, 4]

cuando empalmes

var arr = [1,2,3,4]; arr.splice(1,1); console.log(arr)
//result
 [1, 3, 4]

en caso de borrar el elemento se elimina pero el el índice permanece vacío

mientras que en el caso de empalme elemento se elimina y el índice de elementos de descanso se reduce en consecuencia


6
2017-08-06 10:42