Quelle est la meilleure façon de convertir ...? à p> merci pour votre attention p> edit: mon mauvais. J'ai une question corrigée. Besoin de toutes les paires d'objet imbriqué. La profondeur est constante p> p>
3 Réponses :
Vous pouvez utiliser objet.entre ( ) et Réduire () Pour faire ça. p> const obj = {
A: {
B: [0, 0, 0, 0]
},
D: {
B: [0, 0, 0, 0],
C: [0, 0, 0, 0]
}
};
var result = Object.entries(obj).reduce((acc, [key, value]) => {
Object.entries(value).forEach(([subKey, subValue]) => {
acc[key + ' - ' + subKey] = subValue;
});
return acc;
}, {});
console.log(result);
Agréable. Merci beaucoup!
One Possibilité: P>
p>
// helper
const findLeafPaths = (o, path = [[]]) =>
typeof o == 'object' && !(Array.isArray(o))
? Object .entries (o) .flatMap (
([k, v]) => findLeafPaths (v, path).map(p => [k, ...p])
)
: path
// main function
const convert= (obj) =>
findLeafPaths (obj) .reduce ((a, ps) => ({
...a,
[ps.join(' - ')]: ps .reduce ((o, p) => (o || {}) [p], obj)
}), {})
// demonstration
const obj = {
A: { B: [0, 0, 0, 0] },
D: {
B: [0, 0, 0, 0],
C: [0, 0, 0, 0],
E: {
F: 42
}
}
}
console .log (convert (obj))Vous pouvez adopter une approche dynamique pour tout département d'objets imbriqués en stockant le chemin et l'objet de base et l'objet réel.
p>
.as-console-wrapper { max-height: 100% !important; top: 0; }
Le meilleur moyen est une solution avec laquelle vous obtenez le résultat dont vous avez besoin. Qu'est-ce que tu as essayé jusque-là?
Un objet ne peut avoir qu'une seule propriété avec un nom donné; Il ne peut y avoir deux propriétés "D" dans le même objet.