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
经验分享 程序员 微信小程序 职场和发展