Eliminar propiedad para todos los objetos en la matriz
Quiero eliminar la bad
propiedad de cada objeto de la matriz. ¿Existe una mejor manera de hacerlo que usar un for
bucle 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 prototype
o algo así. No sé. ¿Ideas?
Aceptado
Con ES6, puede deconstruir cada objeto para crear uno nuevo sin atributos con nombre:
const newArray = array.map(({dropAttr1, dropAttr2, ...keepAttrs}) => keepAttrs)
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 .
delete
es 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 propiedadundefined
o simplemente crear nuevos objetos sin la propiedad.
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;
});