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, P>
ci-dessous est la condition d'échantillonnage de l'entrée, mais dans la situation réelle, je ne comprendra pas cet objet. p> C'est le résultat que je veux (voir le numéro est même ou impair, même = true, étrange = false) p> et ceci est mon code p> J'apprécierai vraiment Si quelqu'un peut m'aider à cela. p> p>
3 Réponses :
au lieu de Notez que cela va muté l'objet d'origine, Si vous voulez le garder, effectuez une copie: p> retour {[élément]: résultat}; code>, écrase la valeur et renvoyer l'objet muté de la fonction après la boucle:
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
}
Au lieu de muter quelque chose de faire quelque chose de plus fonctionnel et de retourner un nouvel objet: 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. P> p>
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 p> iSeven code>. Voici une technique:
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)