Map Set 总结

Map Set 总结

Set

下面是Set的构造函数的原型

在这里插入图片描述

map

下面是Map的构造函数的原型

在这里插入图片描述

	//Set声明  
	var setObj = new Set([1,2,3]) //参数为数组
	
  • 取值需要同便利的形式,或者转成数组
  • ar mapObj = new Map([[a,b],[c,d]]) //参数为二维数组 因为他们是 key => value 存在的
  • 有取值和设置方法 即 set get 注意set方法参数为两个参数 而不是一个数组*
  • 二者都存在的方法
  • has delect keys values clear forEach entries
    对迭代器的理解
	// Set Map 迭代原理
			var setObj = new Set([1,2,3]);
			// [Symbol.iterator] == setObj.entries()
			console.log(setObj[Symbol.iterator]().constructor == setObj.entries().constructor)
			// 先说下正常的for of 循环 原理
			// for...in 是通过Object.keys() 得到key []通过对数组进行便利 后面基本也是和of差不多的原理
			// for(var i of obj){}
			// obj 身上需要有个一Symbol.iterator方法返回一个 Iterator 迭代机
			// iterator身上需要定义一个next()方法 next执行的时候需要返回 prointor指针位置的元素,和是否能迭代完成即{value:[v,i],done:Boolean} next里面需要定义if()条件来改变指针向下的位置。当指针不该改变是done应该返回true。
			// 实现方式类似:
			
			var obj = [1,2,3] 
			for(var a = obj[Symbol.iterator](),b = a.next();b.done != true;b = a.next()){
				console.log(b)
			}
			
			//iter(entries)是我对迭代对象的forEach仿写
			iter(setObj,function(v,i){
				console.log(i,v)
			})
			
			setObj.forEach(function(i,v){
				console.log(i,v) // {1 => 1;2 => 2;3 =>3}
			})
			var o = {a:1,b:2}
			console.log(Object.keys(o))
			for (k in o) {
				console.log(k)
			}
			/*
			* fx 其实为方法体的内容
			*/
			function iter(setObj,fx){
				var entrior = setObj.entries()// 迭代初始化 建立forEach循环的时候  可以看作是一种状态
				var iterMain = function(entrior,fx){
					var prointor = entrior.next()//prointor 迭代器指针
					if(!prointor.done){
						//TODO
						if(fx){
							// 当前遍历的键值对
							fx(prointor.value[1],prointor.value[0])
						}
						iterMain(entrior,fx)
					}
				}
				iterMain(entrior,fx)
			}
			
``//  更新 21/12/2
 // 怎样自定义一个able object
  interface iterator{
  	next:()=>{value:any,done:boolean}
  } // 迭代器
  // 1.实现一个可跌代的对象 主要是需要实现一个  Symbol.iterator = ()=> iterator
  // 2.官方文档( https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Iteration_protocols) 推荐是Symbol.iterator:Generator
  // 3.Generator 理解为一个生成器
  Function Generator() => iterator
 // 所以实现一个 able Object,只需要给对象的 Symbol.iterator = Generator
 
 // custom  code 
 var a = {a:1,b:2}
 a[Symbol.iterator] = function(){
 var falg = 0;
 var self = this;
 return {
	 next: function(){
	 var key = Object.keys(self)[falg];
	 falg++;
	 console.log(key);
	 return{value:self[key],done:!key}
	 }
 }
}

[...a] //[1, 2]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值