Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

111
Vistas
el objeto de limpieza conduce a la pérdida del valor 0

Encontré una lista de operaciones de datos y el valor perdido de [0].

No pude averiguar por qué. es bueno si cambio el valor a [1], pero si pongo el valor [0], desaparece.

Aquí está el código:

 let data = { title:"hello world", value: [0] } let sanitized = removeNull(data); console.log(sanitized) // ------------------------------------------------------------------------ function removeNull(obj) { Object.keys(obj).forEach(k => (obj[k] && typeof obj[k] === 'object') && removeNull(obj[k]) || (typeof obj[k] !== 'boolean' && !obj[k] && obj[k] !== undefined) && delete obj[k] ); return obj; };
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Cuando obj[k] es 0 , se está ejecutando delete obj[k] porque en la expresión:

 (obj[k] && typeof obj[k] === 'object') && removeNull(obj[k]) || (typeof obj[k] !== 'boolean' && !obj[k] && obj[k] !== undefined) && delete obj[k]

... obj[k] es falso (por lo que toda la línea superior anterior es falsa. Luego procedemos a verificar la segunda línea debido a ||.

  • typeof 0 es Number que es !== boolean , así que eso es cierto...
  • !0 es cierto...
  • 0 !== undefined también es cierto...

lo que nos deja comprobar la veracidad del término final, que es delete obj[k] . ...lo cual resulta ser true , por cierto, no es que importe, porque 0 se elimina en virtud de que comprobamos el valor del último término.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Actualizar

Ahhh, typeof obj[k] !== 'boolean' && !obj[k] && obj[k] !== undefined se evalúa como verdadero porque 0 se considera falso en Javascript. Entonces !obj[k] es verdadero.

respuesta original

La función removeEmpty actual está probando si el resultado de JSON.stringify(o[k] === "[0]") es veraz. Probablemente quisiste probar si los contenidos en cadena de o[k] son iguales a "[0]". Así que algo como JSON.stringify(o[k]) === "[0]" debería resolver tu problema.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Algunos conceptos clave:

  • 0 es falso
  • typeof null === 'object' es verdadero
  • typeof [] === 'object' es verdadero

Actualmente, el código se ejecuta de la siguiente manera:

  • Cuando llega a la parte del ciclo donde obj[k] = [0] , se llama a removeNull() en [0] porque las matrices son de tipo object .
  • Cuando iteramos sobre [0] en esa llamada de removeNull(), k comienza como 0 (el índice en la matriz) y obj[k] se convierte en 0 (el valor). 0 pasa typeof 0 !== 'boolean' && !0 && 0 !== undefined , por lo que se deleted y se convierte en un elemento vacío en la matriz. delete vacía los elementos de la matriz pero no elimina el índice.

Puede haber algunas formas de reorganizar el código para que sea un poco más seguro y fácil de depurar, dependiendo de si también desea eliminar nulos en las matrices.

 let data = { title:"hello world", // not removed value: [ 0, // not removed null // removed ], name: null, // removed author: { name: null, // removed hats: false, // not removed pets: [null] // --> [] partners: [] // --> [] } } const sanitized = removeNull(data); console.log(sanitized) // ----------------------------------------------------------------------- function removeNull(obj) { Object.keys(obj).forEach((key) => { if(obj[key] === null) { // removes the element differently // depending on whether obj is array or object. return Array.isArray(obj) ? obj.splice(key, 1) : delete obj[key] } if(typeof obj[key] === 'object') removeNull(obj[key]) }) return obj }

Si no le importa verificar null en las matrices, agregue && !Array.isArray(obj) a la segunda verificación y elimine el ternario que decide cómo eliminar.

Una nota: además de devolver el nuevo objeto sin valores nulos, este código (y su código) actualmente también modifican el objeto original.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda