исправлено копирование оператора распространения js поверх глубоких значений с тем же ключом

#javascript #ecmascript-6 #copy #deep-copy

#javascript #ecmascript-6 #Копировать #глубокое копирование

Вопрос:

Как я могу исправить ниже, чтобы t:false оно сохранялось b ?

https://jsfiddle.net/5gvxb7wL/

 const a = { t: true, deep: { t: true} }
const b = { t: false, ...a }
console.log('a', a)
console.log('b', b)
 

консоли

 "a", {
  deep: {
    t: true
  },
  t: true
}
"b", {
  deep: {
    t: true
  },
  t: true
}
 

Ответ №1:

Распространение a перед перечислением t: false ; более позднее свойство, указанное / интерпретируемое, будет иметь приоритет:

 const a = { t: true, deep: { t: true} }
const b = { ...a, t: false }
console.log(b) 

Ответ №2:

Когда вы используете оператор распространения { t: false, … a } подобным образом, вы сначала изменяете значение t, а затем перезаписываете его копией всех значений из объекта a, поэтому для правильного использования оператора распространения вам нужно сначала распространить копию объекта, который вы копируете, изатем вы изменяете отдельные значения, которые вам нужны {…a, t: false } .