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

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

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 Relatório

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 Relatório

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 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