es6:Map数据结构的经典用法(购物车)
利用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
上一篇:
通过多线程提高代码的执行效率例子