validacion - Javascript: eliminar campos no definidos de un objeto
validar formulario javascript html5 (10)
Esta pregunta ya tiene una respuesta aquí:
- Eliminar atributos en blanco de un objeto en Javascript 27 respuestas
¿Hay una forma limpia de eliminar campos indefinidos de un objeto?
es decir
> var obj = { a: 1, b: undefined, c: 3 }
> removeUndefined(obj)
{ a: 1, c: 3 }
Me encontré con dos soluciones:
_.each(query, function removeUndefined(value, key) {
if (_.isUndefined(value)) {
delete query[key];
}
});
o:
_.omit(obj, _.filter(_.keys(obj), function(key) { return _.isUndefined(obj[key]) }))
Aquí hay una solución javascript simple (no se requiere biblioteca):
function removeUndefinedProps(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop) && obj[prop] === undefined) {
delete obj[prop];
}
}
}
Demostración de trabajo: http://jsfiddle.net/jfriend00/djj5g5fu/
Debido a que no parece haber sido mencionado, este es mi método preferido, sin efectos secundarios o dependencias externas:
const obj = {
a: 1,
b: undefined
}
const newObject = Object.keys(obj).reduce((acc, key) => {
const _acc = acc;
if (obj[key] !== undefined) _acc[key] = obj[key];
return _acc;
}, {})
console.log(newObject)
// Object {a: 1}
Encuentro la mejor manera de usar algo como Lodash.
import pickBy from ''lodash/pickBy''
import identity from ''lodash/identity''
const cleanedObject = pickBy(originalObject, identity)
La función de identidad es solo x => x y será falsa para todos los valores falsos. Así que esto elimina indefinido, "", nulo, etc.
Si solo quieres eliminar undefined, puedes hacer algo como:
const cleanedObject = pickBy(originalObject, v => v !== undefined)
Le brinda un nuevo objeto, que generalmente es una mejor idea que mutar su objeto original como lo sugieren algunas de las otras respuestas.
Esta solución también evita que hasOwnProperty()
como Object.keys devuelva una matriz de las propias propiedades enumerables de un objeto dado.
Object.keys(obj).forEach(function (key) {
if(typeof obj[key] === ''undefined''){
delete obj[key];
}
});
y puede agregar esto como null
o ''''
para una limpieza más estricta.
Este es fácil de recordar, pero puede ser lento. Use jQuery para copiar propiedades no nulas a un objeto vacío. No hay copia profunda a menos que agregue true
como primer argumento.
myObj = $.extend({}, myObj);
Mhh ... Creo que @Damian solicita remove undefined field (property) from an JS object
. Entonces, simplemente haría:
for (const i in myObj)
if (typeof myObj[i] === ''undefined'')
delete myObj[i];
Solución corta y eficiente, en (vainilla) JS! Ejemplo:
const myObj = {
a: 1,
b: undefined,
c: null,
d: ''hello world''
};
for (const i in myObj)
if (typeof myObj[i] === ''undefined'')
delete myObj[i];
console.log(myObj);
Otra solución de Javascript
for(var i=0,keys = Object.keys(obj),len=keys.length;i<len;i++){
if(typeof obj[keys[i]] === ''undefined''){
delete obj[keys[i]];
}
}
No se requiere una verificación adicional de la hasOwnProperty
Object.keys
ya que Object.keys
no busca la cadena del prototipo y devuelve solo las propiedades de obj
.
También se podría usar el filtro JQuery para objetos.
var newobj = $(obj).filter(function(key) {
return $(this)[key]!== undefined;
})[0];
Demo here
Una sola línea que utiliza la función de flecha ES6 y el operador ternario:
Object.keys(obj).forEach(key => obj[key] === undefined ? delete obj[key] : '''');
O use una evaluación de cortocircuito en lugar de ternaria: (@Matt Langlois, ¡gracias por la información!)
Object.keys(obj).forEach(key => obj[key] === undefined && delete obj[key])
Mismo ejemplo usando if expresión:
Object.keys(obj).forEach(key => {
if (obj[key] === undefined) {
delete obj[key];
}
});
Si desea eliminar null
, ''''
e undefined
, use !obj[key]
lugar de obj[key] === undefined
.
Si también desea eliminar los elementos de los objetos anidados, puede utilizar una función recursiva :
const removeEmpty = (obj) => {
Object.keys(obj).forEach(key => {
if (obj[key] && typeof obj[key] === ''object'') removeEmpty(obj[key]);
else if (obj[key] === undefined) delete obj[key];
});
return obj;
};
var obj = { a: 1, b: undefined, c: 3 }
Para eliminar objetos undefined
en un objeto que usamos como este
JSON.parse(JSON.stringify(obj));
Salida: {a: 1, c: 3}