Eliminar propiedad para todos los objetos en la matriz

Resuelto Zack Argyle asked hace 11 años • 19 respuestas

Quiero eliminar la badpropiedad de cada objeto de la matriz. ¿Existe una mejor manera de hacerlo que usar un forbucle y eliminarlo de cada objeto?

var array = [{"bad": "something", "good":"something"},{"bad":"something", "good":"something"},...];

for (var i = 0, len = array.length; i < len; i++) {
  delete array[i].bad;
}

Parece que debería haber una forma de usarlo prototypeo algo así. No sé. ¿Ideas?

Zack Argyle avatar Aug 09 '13 01:08 Zack Argyle
Aceptado

Con ES6, puede deconstruir cada objeto para crear uno nuevo sin atributos con nombre:

const newArray = array.map(({dropAttr1, dropAttr2, ...keepAttrs}) => keepAttrs)
piotr_cz avatar Oct 19 '2017 21:10 piotr_cz

Las únicas otras formas son cosméticas y, de hecho, son bucles.

Por ejemplo :

array.forEach(function(v){ delete v.bad });

Notas:

  • Si desea ser compatible con IE8, necesitará una corrección para forEach . Como mencionas el prototipo, prototipo.js también tiene un shim .
  • deletees uno de los peores "asesinos de la optimización" . Su uso a menudo interrumpe el rendimiento de sus aplicaciones. No puede evitarlo si realmente desea eliminar una propiedad, pero a menudo puede establecer la propiedad undefinedo simplemente crear nuevos objetos sin la propiedad.
Denys Séguret avatar Aug 08 '2013 18:08 Denys Séguret

Prefiero usar el mapa para eliminar la propiedad y luego devolver el nuevo elemento de la matriz.

array.map(function(item) { 
    delete item.bad; 
    return item; 
});
ex0b1t avatar Nov 18 '2015 09:11 ex0b1t