面试题答案
一键面试假设使用的是Svelte框架(因为提到了writable store,Svelte有此特性),以下是核心代码逻辑:
<script>
import { writable } from'svelte/store';
// 1. 创建writable store用于存储购物车商品列表
const cart = writable([]);
// 添加商品到购物车
function addItemToCart(item) {
cart.update(c => {
const existingItem = c.find(i => i.id === item.id);
if (existingItem) {
existingItem.quantity++;
} else {
item.quantity = 1;
c.push(item);
}
return c;
});
}
// 计算购物车中商品的总价
let totalPrice = 0;
const unsubscribe = cart.subscribe(c => {
totalPrice = c.reduce((acc, item) => acc + item.price * item.quantity, 0);
});
// 清空购物车
function clearCart() {
cart.set([]);
}
</script>
{#if $cart.length > 0}
<p>购物车总价: {totalPrice}</p>
<button on:click={clearCart}>清空购物车</button>
{/if}
上述代码实现了:
addItemToCart
函数用于添加商品到购物车,通过cart.update
方法更新cart
这个writable store
。- 使用
cart.subscribe
订阅cart
的变化,实时计算并更新totalPrice
。 clearCart
函数通过cart.set([])
重置cart
这个writable store
,实现清空购物车功能。