validar validacion vacios recorrer objetos objeto formularios formulario enviar eliminar elemento ejemplos con campos array antes javascript object field undefined

validacion - Javascript: eliminar campos no definidos de un objeto



validar formulario javascript html5 (10)

Esta pregunta ya tiene una respuesta aquí:

¿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 .

DEMO


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])

jsbin

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; };

jsbin


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}