Как вернуть объект через функцию при помощи оператора распространения?

Рейтинг: 2Ответов: 2Опубликовано: 19.01.2023

Всем привет! Подскажите, пожалуйста, как вернуть объект его копией, при этом изменив одно из значений ключа в изначальном объекте? Слышал про Object.assign({}), но он изменяет изначальный объект, а я бы хотел получить копию c измененным значением + оригинальный объект.

let color_lawn = {
    title: 'lawn',
    color: '#00FF00',
    rating: 0
}

const getColorRating = (color, rating) => ({
    ...color.rating
})

console.log(getColorRating(color_lawn, 5);

Ответы

▲ 2Принят

let color_lawn = {
  title: 'lawn',
  color: '#00FF00',
  rating: 0
}

const getColorRating = (color, rating) => ({
  ...color_lawn,
  color,
  rating,
})

console.log(getColorRating('#555555', 1))

▲ 1

Для создания копии объекта можно воспользоваться spread оператором, но он копирует только 1 уровень. Если в объекте есть другие объекты, то они будут переданы по ссылке

let color_lawn = {
  title: 'lawn',
  color: '#00FF00',
  rating: 0
}

const getColorRating = (color, rating) => {
  const newColor = { ...color_lawn }
  newColor.color = color;
  newColor.rating = rating;
  return newColor;
}

const color_q = getColorRating('#555555', 1);
console.log(color_q === color_lawn)