面试题答案
一键面试实现思路
- 创建购物车数据结构:用于存储加入购物车的商品及其数量。
- 派生存储:使用响应式编程或类似机制,当购物车内容变化时重新计算总价。
- 库存检查:在添加商品到购物车时,检查库存是否充足。
- 性能优化:通过依赖跟踪机制,只有购物车中相关商品变化时才重新计算总价。
关键代码片段(以JavaScript和Vuex为例)
// Vuex store
const store = new Vuex.Store({
state: {
cart: [], // 购物车,数组中每个元素是 { product, quantity } 的对象
products: [
{ id: 1, price: 10, stock: 5 },
{ id: 2, price: 20, stock: 3 }
]
},
getters: {
totalPrice: state => {
return state.cart.reduce((total, item) => {
const product = state.products.find(p => p.id === item.product.id);
return total + product.price * item.quantity;
}, 0);
}
},
mutations: {
addToCart(state, { product, quantity }) {
const existingItem = state.cart.find(item => item.product.id === product.id);
if (existingItem) {
if (product.stock >= existingItem.quantity + quantity) {
existingItem.quantity += quantity;
} else {
console.error('库存不足');
}
} else {
if (product.stock >= quantity) {
state.cart.push({ product, quantity });
} else {
console.error('库存不足');
}
}
}
}
});
在上述代码中:
state.cart
存储购物车中的商品及数量。getters.totalPrice
计算购物车的总价。mutations.addToCart
在添加商品到购物车时检查库存,并更新购物车状态。当库存不足时,打印错误信息。这种实现方式利用Vuex的依赖跟踪机制,只有购物车内容变化时totalPrice
才会重新计算,优化了性能。