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

148
Vistas
Cambiar la clave de objetos anidados recursivamente

Tengo un objeto como este, hay muchas claves denominadas choices label

 obj = { "label":"mylabel", "choices:[ { "label":"mylabel_11", "choices":{ "label":"mylabel_12", "choices":[...] } },{ "label":"mylabel_21", "choices":{ "label":"mylabel_22", "choices":[...] } }, ] }

Ahora quiero cambiar todo "etiqueta" a "nombre", "opciones" a "niños"

¿Hay alguna forma recursiva de reemplazar el nombre?

Actualmente mi idea es

 var new_keys; for (key in obj){ var old_key = key; key = key.replace("label","name"); key = key.replace("choices","children"); new_keys[key] = obj[old_key] }

¿Cómo puedo hacer esto recursivo?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

En mi humilde opinión, la forma más fácil sería usar string.replace. Todo el código en una línea

 var obj=JSON.parse(JSON.stringify(obj).replaceAll("\"label\":","\"name\":") .replaceAll("\"choices\":","\"children\":"));

resultado

 { "name": "mylabel", "children": [ { "name": "mylabel_11", "children": { "name": "mylabel_12", "children": [] } }, { "name": "mylabel_21", "children": { "name": "mylabel_22", "children": [] } } ] }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Podría intentar usar la recursión de la siguiente manera, teniendo en cuenta que la declaración if explica el hecho de que las "opciones" de su objeto pueden ser una matriz o un objeto.

 function replaceObject(yourObj) { if (yourObj.hasOwnProperty("label")) { if (Array.isArray(yourObj.choices)) { return { name: yourObj.label, children: yourObj.choices.map((choice) => { return replaceObject(choice); }), }; } else { return { name: yourObj.label, children: replaceObject(yourObj.choices), }; } } }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Creo que está pidiendo una forma de hacer que penetre arbitrariamente en su objeto. Creo que esto podría funcionar:

 function recursiveKeyRename(obj) { var new_keys; for (key in obj){ var old_key = key; key = key.replace("label","name"); key = key.replace("choices","children"); new_keys[key] = obj[old_key] }; if (obj.children && obj.children.choices) { recursiveKeyRename(obj.children.choices) }; };

Realmente no he probado eso, y eso solo funciona si todas sus "opciones" son objetos, no matrices como usted (¿quizás?) Implicado en su ejemplo. Sin embargo, se puede modificar fácilmente para cualquier caso de uso.

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