Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

110
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!