0
votes

Réduire et déconstruire / affectation d'objet

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: xxx pré>

mais il cesse de fonctionner une fois que j'essaie de créer un nouvel objet dérivé de B1 à l'aide de . / 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>

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 commentaires

Lorsque l'extrait est exécuté, b2 est {} , un objet vide.


@Pointy si vous utilisez console.log (b2.a) 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})


3 Réponses :


2
votes

Par défaut, les propriétés créées avec defineProperty code> ne sont pas énumérables, elles ne seront donc pas incluses avec une propagation.

Pour corriger: p>

b2 = Object.entries(b1).reduce((acc, [key, value]) =>
  Object.defineProperty(acc, key, {value, enumerable: true})
, {})


0 commentaires

0
votes

Un correctif pourrait être d'utiliser objet.Assign code> pour créer une copie de B1 code> comme:

p>

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 }


0 commentaires

1
votes

Vous devez marquer la propriété comme énumérable xxx pré>

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 }


0 commentaires