0
votes

Créez de manière récursive un objet imbriqué à partir d'un autre objet en JavaScript

Je suis nouveau à la programmation et je travaillais une question qui me dérange depuis un moment.

Je veux créer de manière récursive un objet imbriqué à partir d'un autre objet imbriqué dans JavaScript,

ci-dessous est la condition d'échantillonnage de l'entrée, mais dans la situation réelle, je ne comprendra pas cet objet. xxx

C'est le résultat que je veux (voir le numéro est même ou impair, même = true, étrange = false) xxx

et ceci est mon code xxx

J'apprécierai vraiment Si quelqu'un peut m'aider à cela.


0 commentaires

3 Réponses :


1
votes

au lieu de retour {[élément]: résultat}; code>, écrase la valeur et renvoyer l'objet muté de la fonction après la boucle:

Notez que cela va muté l'objet d'origine, Si vous voulez le garder, effectuez une copie: p>

const copie = json.parse (JSON.Stringify (Nums)); code> P>

const nums = {
  Obj: {
    x1: {
      x11: 43,
      x12: 4,
      x13: 612
    },
    x2: {
      x21: 4,
      x22: 7,
    },
    x3: 2,
  }
}
const res = {};
const copy = JSON.parse(JSON.stringify(nums));

getResult(copy);

console.log(res);

function getResult(x) {
  Object.keys(x).forEach(element => {
    if (isNaN(x[element])) {
      res[element] = getResult(x[element]);
    } else {
      let result = (x[element] % 2 < 1) ? true : false;
      x[element] = result; // overwrite the number with true or flse
    }
  });
  return x; // return the mutated object
}


0 commentaires

1
votes

Au lieu de muter quelque chose de faire quelque chose de plus fonctionnel et de retourner un nouvel objet: xxx

Nous vérifions si l'objet est un objet (utilisant typeof) et allez-y en profondeur. Sinon, nous vérifions si c'est impair ou même.


0 commentaires

1
votes

Vous pouvez également penser à cela plus génériquement, écrire une fonction qui appliquera votre transformation à tous les nœuds de feuille de votre objet, puis l'appelant avec une fonction iSeven code>. Voici une technique:

p>

const mapLeaves = (fn) => (tree) =>
  Array .isArray (tree)
    ? tree .map (x => mapLeaves (fn) (x))
  : typeof tree == "object"
    ? Object .fromEntries (Object .entries (tree) .map (
        ([k, v]) => [k, mapLeaves (fn) (v)]
      ))
  : fn (tree)


0 commentaires