Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

363
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda