Как скопировать объект?
Я захотел попробовать реализовать корзину, как в каком либо интернет-магазине, но столкнулся с вопросом: можно ли каким-нибудь образом, при нажатии на кнопку, скопировать объект из одного объекта в другой, при этом складывая его числовые значения?
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);