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

Всем привет! Подскажите, пожалуйста, как вернуть объект его копией, при этом изменив одно из значений ключа в изначальном объекте? Слышал про 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 шт):

Автор решения: SwaD

Для создания копии объекта можно воспользоваться 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)

→ Ссылка
Автор решения: Qwertiy

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

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

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

→ Ссылка