При map
-перечислении значений вам нужно будет создать копию каждого объекта.Самый простой способ сделать это - использовать синтаксис объекта ({...obj}
).
. Это приведет к "распространению" всех значений (name
, adress
и т. Д.) Вновый объект.Таким образом, любые изменения не изменят его.Тем не менее, это «мелкий» смысл, то есть это будет новым объектом, но его значения одинаковы.Таким образом, поскольку address
также является объектом, нам также необходимо скопировать его, следовательно, и причина вложенного разброса значения address
.
people = [{
name: 'Bob',
sex: 'male',
address: {
street: 'Elm Street',
zip: '12893'
}
},
{
name: 'Susan',
sex: 'female',
address: {
street: 'Hickory Street',
zip: '00000'
}
}
]
function zipFix(initialArray) {
return initialArray.map(function(person) {
// Create a new "copy" of the person. Using object spread
// will create a "shallow" copy, so since address is also an
// object it will have to be spread (same for other objects that might
// be mutated).
const newValue = { ...person, address: { ...person.address }}
if (newValue.address.zip === '00000') {
newValue.address.zip = "12893";
}
return newValue
});
}
console.log(zipFix(people))
console.log(people) // unchanged