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

153
Vistas
Hacer que la función recursiva sea funcional en Javascript

Estoy implementando un cifrado recursivo para objetos de Javascript, pero la solución que se me ocurrió no es funcional. Esto ha causado algunos errores extraños ya que manipula el objeto directamente. ¿Hay alguna forma de hacer que esto sea funcional (devolver un nuevo objeto encriptado)?

No sé cómo hacer que esto permanezca recursivo y al mismo tiempo devolver un nuevo objeto (funcional). Específicamente, esto es encryptObject(dd)

 class Security { static encryptText = (text) => { //function to encrypt text/strings }; static encryptObject(dd) { try { for (let d in dd) { if (!dd[d]) { continue; } else if (typeof dd[d] !== "object") { dd[d] = this.encryptText(dd[d]); } else { this.encryptObject(dd[d]); } } } catch (e) { console.log(e.message + `error encrypting`); } } const data = {dog:"john", cat:"anders", weapons:{laser:"3",sword:"1"}} Security.encrypt(data)

Me gustaría llamar a la función de esta manera en su lugar

 const data = {dog:"john", cat:"anders", weapons:{laser:"3",sword:"1"}} const encryptedData = Security.encrypt(data)
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

¿Simplemente crear y devolver un nuevo objeto en su lugar?

 static encryptObject(objectToEncrypt) { try { const newObj = {}; for (const [key, value] of Object.entries(objectToEncrypt)) { if (!value) { newObj[key] = value; } else if (typeof value !== "object") { newObj[key] = this.encryptText(value); } else { newObj[key] = this.encryptObject(value); } } return newObj; } catch (e) { console.log(e.message + `error encrypting`); } }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Una forma de escribir esto es basarlo en una función de map que maneja arreglos y objetos. Con esto, y una función identidad simple (x) => x , podemos escribir esto como

 const encryptObj = (o) => (typeof o == 'object' ? map (encryptObj) : typeof o == 'string' ? encryptText : x => x) (o)

Según si tenemos un objeto, una cadena u otra cosa, elegimos mapear recursivamente el resultado sobre los niños, llamar al cifrado de texto o devolver el valor sin cambios. Usando una función rot13 simple como cifrado de texto ficticio, podríamos escribir una función simple como esta:

 const map = (fn) => (o) => Array .isArray (o) ? o .map (fn) : Object .fromEntries (Object .entries (o) .map (([k, v]) => [k, encryptObj (v)])) // simple rot13 const encryptText = (cs) => [...cs] .map ((c, i, _, cc = cs.charCodeAt (i)) => cc > 64 && cc <= 91 ? String .fromCharCode (65 + ((cc - 52) % 26)) : cc > 96 && cc <= 123 ? String .fromCharCode (97 + ((cc - 84) % 26)) : c) .join ('') const encryptObj = (o) => (typeof o == 'object' ? map (encryptObj) : typeof o == 'string' ? encryptText : x => x) (o) console .log (encryptObj ({ a: 'foo', b: ['bar', 'baz', 'qux'], c: false, d: { e: { f: { g: { h: 42, i: 'CORGE', j: { k: 'Grault' } } }, l: 99 } } }))
 .as-console-wrapper {max-height: 100% !important; top: 0}

Y, por supuesto, puede convertir esto en una función estática de su clase rociando algo de this alrededor del código.

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