Supongamos que tengo este código:
var myArray = new Object();
myArray["firstname"] = "Bob";
myArray["lastname"] = "Smith";
myArray["age"] = 25;
Ahora, si quisiera eliminar "apellido" ... ¿hay algún equivalente de 
myArray["lastname"].remove()?
(Necesito que el elemento desaparezca porque la cantidad de elementos es importante y quiero mantener las cosas limpias).

"Test" + {};es una declaración JS perfectamente válida.Respuestas:
Los objetos en JavaScript pueden considerarse como matrices asociativas, claves de mapeo (propiedades) a valores.
Para eliminar una propiedad de un objeto en JavaScript, utilice el
deleteoperador:Tenga en cuenta que cuando
deletese aplica a una propiedad de índice de unArray, creará una matriz escasamente poblada (es decir, una matriz con un índice faltante).Cuando trabaje con instancias de
Array, si no desea crear una matriz escasamente poblada, y generalmente no lo hace, entonces debe usarArray#spliceoArray#pop.Tenga en cuenta que el
deleteoperador en JavaScript no libera memoria directamente. Su propósito es eliminar propiedades de los objetos. Por supuesto, si una propiedad que se elimina contiene la única referencia restante a un objetoo,ose recolectará basura de la manera normal.El uso del
deleteoperador puede afectar la capacidad de los motores de JavaScript para optimizar el código .fuente
delete myArray[0]. Ver stackoverflow.com/a/9973592/426379 y Eliminar elementos de la matrizlengthpropiedad de un objeto Array permanece sin cambios.myArrayrealmente se usara como una matriz, pero no lo es (myArrayes un nombre desafortunado), es un objeto. Entonces en este casodeleteestá bien. Tenga en cuenta que incluso si fue creado comonew Array()y utilizado como matriz asociativa, todavía estaría bien. Sin embargo, su advertencia todavía es algo a tener en cuenta si uno está usando matrices reales.Todos los objetos en JavaScript se implementan como tablas hash / matrices asociativas. Entonces, los siguientes son equivalentes:
Y, como ya se indicó, "elimina" una propiedad de un objeto mediante la
deletepalabra clave, que puede usar de dos maneras:Espero que la información adicional ayude ...
fuente
myObj['some;property'], funciona, peromyObj.some;propertyno lo haría (por razones obvias). Además, puede que no sea obvio que puede usar una variable en la notación de corchetes, es decirvar x = 'SomeProperty'; alert(myObj[x])Ninguna de las respuestas anteriores aborda el hecho de que Javascript no tiene matrices asociativas para empezar, no hay ningún
arraytipo como tal, veatypeof.Lo que tiene Javascript son instancias de objetos con propiedades dinámicas. Cuando las propiedades se confunden con elementos de una instancia de objeto Array, es probable que sucedan cosas malas:
Problema
Solución
Para tener una función de eliminación universal que no explote, use:
fuente
Arrays en JS son objetos, pruebetypeof new Array();otypeof []verifique.Arrayes simplemente un cierto tipo de objeto y no es en absoluto una "bestia diferente". En JS, los objetos se distinguen por su nombre de constructor y cadena de prototipos, consulte Programación basada en prototipos .deleteoperador de deficiencia con respecto aArrayproporcionar una función polimórfica simple.deleteno tiene deficienciadeleteestá diseñado para eliminar propiedades. Eso es. La aplicación del operador de eliminación a un índice de una matriz elimina ese índice. ¿Qué más necesitas hacer? Te queda una matriz dispersa, que es una característica del lenguaje. Si no desea una matriz dispersa, no elimine el índice: usespliceopop.Eso solo elimina elimina el objeto pero aún mantiene la longitud de la matriz igual.
Para eliminar debes hacer algo como:
fuente
Si bien la respuesta aceptada es correcta, le falta la explicación de por qué funciona.
En primer lugar, su código debe reflejar el hecho de que esto NO es una matriz:
Tenga en cuenta que todos los objetos (incluidos los
Arrays) se pueden usar de esta manera. Sin embargo, ¡no espere que las funciones estándar de matriz JS (pop, push, ...) funcionen en objetos!Como se dijo en la respuesta aceptada, puede usar
deletepara eliminar las entradas de los objetos:Debe decidir qué ruta desea tomar: utilice objetos (matrices / diccionarios asociativos) o utilice matrices (mapas). Nunca mezcles los dos.
fuente
Use el método
splicepara eliminar completamente el elemento de una matriz de objetos:fuente
Como han señalado otras respuestas, lo que está utilizando no es una matriz de Javascript, sino un objeto de Javascript, que funciona casi como una matriz asociativa en otros idiomas, excepto que todas las teclas se convierten en cadenas. El nuevo Mapa almacena las claves como su tipo original.
Si tenía una matriz y no un objeto, podría usar la función .filter de la matriz para devolver una nueva matriz sin el elemento que desea eliminar:
Si tiene un navegador y jQuery anteriores, jQuery tiene un
$.grepmétodo que funciona de manera similar:fuente
Hay una manera elegante en la Guía de estilo de Airbnb para hacer esto (ES7):
Copyright: https://codeburst.io/use-es2015-object-rest-operator-to-omit-properties-38a3ecffe90
fuente
Estás utilizando Object, no tienes una matriz asociativa para empezar. Con una matriz asociativa, agregar y eliminar elementos es así:
fuente
Puede eliminar una entrada de su mapa asignándola explícitamente a 'indefinido'. Como en tu caso:
fuente
Si por alguna razón la tecla Eliminar no funciona (como si no funcionara para mí)
Puede empalmarlo y luego filtrar los valores indefinidos
No intente encadenarlos ya que el empalme devuelve los elementos eliminados;
fuente
También podemos usarlo como una función. Angular arroja algún error si se usa como prototipo. Gracias @HarpyWar. Me ayudó a resolver un problema.
fuente
Es muy sencillo si tiene dependencia de subrayado.js en su proyecto:
fuente
Al usar la
"delete"palabra clave, eliminará el elemento de matriz de la matriz en javascript.Por ejemplo,
Considere las siguientes declaraciones.
La última línea del código eliminará el elemento de matriz cuya clave es "estado" de la matriz.
fuente
Sin bucles / iteraciones obtenemos el mismo resultado
fuente
Para "matrices":
Si conoces el índice:
Si conoce el valor:
La respuesta más votada para
deletefunciona bien en el caso de los objetos, pero no para las matrices reales. Si lo usodelete, elimina elementos de los bucles pero mantiene el elemento comoemptyy la longitud de la matriz no cambiará. Esto puede ser un problema en algunos escenarios.Por ejemplo, si hago myArray.toString () en myArray después de eliminarlo
delete, crea una entrada vacía, es decir,fuente
El único método de trabajo para mí:
uso:
fuente