Как скопировать объект?

Я захотел попробовать реализовать корзину, как в каком либо интернет-магазине, но столкнулся с вопросом: можно ли каким-нибудь образом, при нажатии на кнопку, скопировать объект из одного объекта в другой, при этом складывая его числовые значения?

HTML:

<button id="addB1">Добавить в корзину</button>

<span id="cost"></span> <!-- сюда будет выводиться значение ключа cost в объекте basket -->

Js:

let list = { //откуда скопировать
    'b1': {
        'name':'Bag1',
        'price':3000
    },
};

let basket = { // куда скопировать
    cost: //здесь должны быть сложены все значения ключа 'price' ,
};

Ответы (3 шт):

Автор решения: Александр Родин

По onclick возвращаем name продукта (добавьте на кнопку атрибут).

Далее, вызываем перебор массива:

    addB1.addEventListener('click', (e) => {
      name = e.target.getAttribute('name')
      price = Object.values(list).find(item => item.name == name ? item.price : null)
      basket.cost += price
    })
→ Ссылка
Автор решения: Pavel Nazarian

let list = {
    'b1': {
        'name':'Bag1',
        'price':3000
    },
    'b2': {
        'name':'Bag2',
        'price':3000
    },
};

let basket = {cost:0};

const changeBasket = name => {
  try {
    const [key,value] = Object.entries(list).find(item => item[1].name == name);
    basket[key] = value;
    basket['cost'] += value.price;
    return basket;
  }
  catch(e) {
    return 'нет такого'
  } 
}

console.log(changeBasket('Bag1'))
console.log(changeBasket('Bag2'))
console.log(changeBasket('Bag3'))

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

let basket = {
  items: [],
  get cost() {
    return this.items.reduce((acc, item) => acc + item.price, 0);
  }
}

console.log('cost of 0 itmes:', basket.cost);
basket.items.push({
  name: 'Bag1',
  price: 3000
})
console.log('cost of 1 item:', basket.cost);
basket.items.push({
  name: 'Bag2',
  price: 4000
})
console.log('cost of 2 itmes:', basket.cost);

→ Ссылка