利用Map数据结构制作一个简单的购物车demo
首先了解Map数据结构是什么?
- Map与数组类似,是用来存放多个值的容器。
- 存放的是键值对,键可以为任意数据类型。
- 与对象相比,其特点为key可以为任意数据类型。
实例化:
let map = new Map() //创建了一个Map对象
let map = new Map([["name","tom"],["age",2],["gender","male"]])
//创建了一个Map对象,并将之初始化
Map()的api:
Map.prototype.xxx
size
set(key,val) //添加数据
get(key) //获取键为key的值
has(key) //判断是否拥有,返回一个boolean
delete(key) //根据key值删除
clear() //清除所有
forEach() //遍历
keys() //获得一个迭代键的迭代器
values() //获得一个迭代值的迭代器
entries() //获得一个迭代键值对的迭代器
//创建一个购物车对象
let shopCar = {
car : new Map(),
//购物车的添加方法
add(data) {
//判断购物车中是否有该商品
if(this.car.has(data.id)) {
//如果有,则只需要将数量加一
this.car.get(data.id).number +=1;
} else {
//如果没有,则添加
this.car.set(data.id,data);
}
},
//移除购物车的方法
remove(id) {
//如果该商品的数量大于一,则只需将数量减一
if(this.car.get(id).number >1) {
this.car.get(id).number -=1;
} else {
//如果该商品的数量为一,则将该商品删除
this.car.delete(id);
}
},
//结算的方法
payment() {
let total = 0;
//如果有优惠券或者打折的条件
for(let val of this.car.values()) {
if(val.discont) {
//discont为打折的倍数,prefer为优惠的金额
total += ((val.discont*val.price)-val.prefer)*val.number;
} else {
total += (val.price-val.prefer)*val.number;
}
}
}
return total;
}
//购物车添加测试
shopCar.add({
id:1,
name:"金华火腿肠",
price:5,
number:1,
discont:0.9,
prefer:0
});
shopCar.add({
id:1,
name:"金华火腿肠",
price:5,
number:1,
discont:0.9,
prefer:0
});
shopCar.add({
id:2,
name:"统一方便面",
price:5,
number:1,
discont:0,
prefer:1
});
console.log("总价:",shopCar.payment()); //总价:13