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

364
Views
JavaScript: el parámetro no se pasó a Array.forEach dentro de la función => ¿indefinido?

 const data = { "desk": { "drawer": "stapler" }, "cabinet": { "top drawer": { "folder1": "a file", "folder2": "secrets" }, "bottom drawer": "soda" }, "item" : [ { "hello" : { "world" : "isHere" }, "test" : "1" }, { "hello" : { "world" : "isHere2" }, "test" : "2" }, ] }; const iterate = (obj) => { Object.keys(obj).forEach(key => { if (typeof obj[key] === 'object') { iterate(obj[key]) } else{ let value = obj[key]; let newObj = {[key]: value, 'style' : {backGroundColor : 'red'}}; delete obj[key]; Object.assign(obj, newObj); } }) } iterate(data); console.log(data)

Escribí una función recursiva que debería reemplazar cada par clave-valor (¡no propiedad!) con un objeto que especifico en el parámetro.

Sin embargo, si uso un bucle array.forEach dentro de la función, el obj pasado no está definido .

¿Qué me estoy perdiendo?

Ejemplo


 const iterate = (obj, newObj) => { Object.keys(obj).forEach(key => { if (typeof obj[key] === 'object') { iterate(obj[key]) } else{ delete obj[key]; Object.assign(obj, newObj); } }) }

Sin embargo, si defino el objeto dentro del forEach, funciona perfectamente...

 const iterate = (obj) => { Object.keys(obj).forEach(key => { if (typeof obj[key] === 'object') { iterate(obj[key]) } else{ let value = obj[key]; // SEE HERE let newObj = {[key]: value, 'style' : {backGroundColor : 'red'}}; delete obj[key]; Object.assign(obj, newObj); } }) }

¿Por qué Object.keys(obj).forEach no ve el parámetro pasado en la primera versión? y cual es la solución?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Debe pasar newObj cada vez que llame iterate dentro de Array.forEach() - iterate iterate(obj[key], newObj) :

 const data = {"desk":{"drawer":"stapler"},"cabinet":{"top drawer":{"folder1":"a file","folder2":"secrets"},"bottom drawer":"soda"},"item":[{"hello":{"world":"isHere"},"test":"1"},{"hello":{"world":"isHere2"},"test":"2"}]}; const iterate = (obj, newObj) => { Object.keys(obj).forEach(key => { if (typeof obj[key] === 'object') { iterate(obj[key], newObj) } else { // delete obj[key]; // remove for example purposes Object.assign(obj, newObj); } }) } const newObj = { 'style': { backGroundColor: 'red' } }; iterate(data, newObj); console.log(data)

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!