Supposons que j'ai deux objets simples et que je souhaite créer un troisième qui rejoint ses propriétés. Cela fonctionne parfaitement: mais il cesse de fonctionner une fois que j'essaie de créer un nouvel objet dérivé de B1 à l'aide de p> . / Code>. Pour un souci de simplicité Créerons une fonction de réduction qui rend simplement une copie peu profonde de l'objet B1: p>
let r = (()=>{
const a1 = {a: 2, b: 3}
const b1 = {a: 100, c: 5},
b2 = Object.entries(b1).reduce((acc, [key, value])=>Object.defineProperty(acc, key, {value}), {})
console.log(b2) // {a: 100 c: 5}
return {...a1, ...b2}
})()
console.log(r);// { a: 2, b: 3 }
3 Réponses :
Par défaut, les propriétés créées avec Pour corriger: p> defineProperty code> ne sont pas énumérables, elles ne seront donc pas incluses avec une propagation.
b2 = Object.entries(b1).reduce((acc, [key, value]) =>
Object.defineProperty(acc, key, {value, enumerable: true})
, {})
Un correctif pourrait être d'utiliser objet.Assign code> pour créer une copie de p> B1 code> comme:
let r = (()=>{
const a1 = {a: 2, b: 3}
const b1 = {a: 100, c: 5}
const b2 = Object.assign({}, b1)
console.log(b2) // {a: 100 c: 5}
return {...a1, ...b2}
})()
console.log(r); // { a: 100, b: 3, c: 5 }
Vous devez marquer la propriété comme énumérable pourquoi ne pas simplement utiliser la fonction objet.Assign code> à la place, c'est simple. P>
let r = (()=> {
const a1 = {a: 2, b: 3};
const b1 = {a: 100, c: 5};
const b2 = Object.entries(b1).reduce((acc, [key, value]) => Object.assign(acc, {[key]: value}), {})
console.log(b2); // {a: 100 c: 5}
return {...a1, ...b2}
})()
console.log(r); // { a: 2, b: 3 }
Lorsque l'extrait est exécuté,
b2 code> est
{} code>, un objet vide.
@Pointy si vous utilisez
console.log (b2.a) code> IT imprime 100
@ Michałsadowski parce que ce n'est pas énorme, il ne sera donc pas montrant lors de la journalisation de l'objet.
objet.defineProperty (obj, clé, {valeur: valeur, énumérable: true}) code>