Es6里面的Set和Map集合

ECMAScript 6中的Set 集合

EcmAScript 6中新增了Set类型是一种有序列表,其中含有一些相互独立的非重复值,通过Set集合可以快速访问其中的数据,更有效地追踪各种离散值

创建Set集合并添加元素

   调用new Set()创建Set集合,调用add()方法向集合中添加元素,访问集合
   sizes属性可以获取集合中目前的元素数量。
let set=new Set();
set.add(1);
set.add(2);
console.log(set.size);//2打印set集合的长度
 在Set集合中的+0和-0被认为是相等的。当然,如果向Set集合中添加多个对象,
 则它们之间彼此保持独立:
let set=new Set();//创建一个set集合
let key={};
let key2={};
set.add(key);
set.add(key2);
console.log(set.size);//2
   由于key和key2不会被转换为字符串,因此他们的Set集合是两个独立的元素;如果
被转换,则二者的值都是“【object Object】”。
   如果多次调用add()方法并传入相同的值作为参数,那么后续的调用实际上
会被忽略:
let set=new Set();
set.add(5);
set.add("5");
set.add(5);
console.log(set.size);//2重复的被忽略的
  由于第二次传入的数字5是一个采重复值,因此其不会被添加到集合中,所以
  console.log()最后输出的Set集合的属性值为2,。也可以用到数组的去重,Set
  构造函数同样会过滤掉重复的值从而保证集合的元素各自唯一。
let set=new Set([1,2,3,4,5,5,5,5]);//可以接受一个数组为参数
console.log(set.size);//5

注意:实际上,Set构造函数可以接收所有可迭代对象作为参数,数组,Set
集合,Map集合都是可以迭代的,因而都可以作为Set构造函数的参数使用;
构造函数通过迭代器从参数中提取值。

   Set里面通过has()方法可以检测Set集合是否存在某个值:
let set=new Set();
set.add(5);
set.add("5");
console.log(set.has(5))//true;
console.log(set.has("5"))//true;
console.log(set.has(6))//因为集合里面没有6所以返回false

移除元素

 调用delete()方法可以移除Set集合中的某一个元素,调用clear()方法会移
 除集合的所有元素。请看下面的代码:
let set=new Set();
set.add(5);
set.add("5");
console.log(set.has(5))//true;
set.delete(5);

console.log(set.has(5));//false
console.log(set.size);//1

set.clear();

console.log(set.has("5"))//false
console.log(set.size);//0

Set集合的forEach()方法

如果你曾经使用过数组,可能已经非常熟悉数组的forEach()方法,ECMAScript5中的这个标准可以简化数组遍历过程,不用再编写循环语句。后来被证实此方法在开发之间非常流行,所以ECMAScript6也为集合Set添加了同样的方法,其使用方法也非常类似。
forEach()方法的回调函数可以接收以下3个参数:

  • Set集合item值也可以说成(项)
  • 与第一个参数一样的值(set里面就这点特殊)
  • 被遍历Set集合的本身
let set=new Set([1,2,3,4]);
set.forEach((item,key,arr)=>{
console.log(item+"=>"+key);//这俩值也一直一样
console.log(set==arr)//一直为true
})

Set集合版的数组去重(利用展开运算符(…))

let arr=[1,1,3,1,2,3,2,2];
let set=new Set(arr);//Set构造函数可以传数组这样就变成set集合了
let newarr=[...set]//利用展开运算符展开set集合,放到数组里面,
console.log(newarr)//利用Set集合唯一性的特点完成简单数组去重[1,3,2]

ECMAScript 6中的Map集合

 ECMAScript 6中的Map类型是一种储存着许多键值对的有序列表,其中的键名和
 对应的值支持所有的数据类型。键名的等价性判断是通过调用Objiect.is()方法
 实现的,所有数字5与字符串“5”会被判定为两种类型,可以分别作为独立的两
 个键出现在程序中,这一点与对象中不太一样,因为对象的属性名终会被强制转
 成字符串类型。
        如果要向Map集合中添加新的元素,可以调用set()方法并分别存入键名
  和对应值作为两个参数:如果要从集合中获取信息,可以调用get()方法。就
  像这样:
let map=new Map();
map.set("title","马帅涛");
map.set("year","2020");
console.log(map.get("title"))//输出马帅涛
console.log(map.get("year"))//输出2020
在对象里面,无法用对象作为对象属性的键名但在Map集合中,却可以这样做:
let map=new Map();//创建一个map集合
let key={};
let key2={};
map.set(key,5);
map.set(key2,7);
console.log(map.get(key))//5
console.log(map.get(key2))//7

Map集合支持的方法

  • has(key) 检查指定的键名在Map集合中是否已经存在。
  • delete(key) 从Map集合中移除指定键名及其对应的值。
  • clear() 移除Map集合中的所有键值对。
  • size 属性其代表当前集合中包含的键值对数量。
  • clear()方法快速清除全部
let map=new Map();
map.set("name","马帅涛");
map.set("age","20");
console.log(map.size);//2

console.log(map.has('name'))//true
console.log(map.get('name'))//"马帅涛"

console.log(map.has("age"))//true;
console.log(map.get("age"))//20

map.delete("name");
console.log(map.get("name"))//undefined
console.log(map.has("name"))//false
console.log(map.size);//1

map.clear();//清空
console.log(map.has("name"));//false
console.log(map.get("name"))//undefined
console.log(map.has("age"))//false
console.log(map.get("age"))//undefined
console.log(map.size)//0

Map集合的初始化方法

可以向map构造函数传入数组来初始化一个Mao集合,这一点同样与Set集合相似。数组中的每个元素都是一个子数组,子数组中包含一个键值对的键名与键值得两个元素。因此整个Mao集合中包含的全是这样的两个元素数组;

let map=new Map([['name','马帅涛'],['age','20']]);//初始化map方法

console.log(map.has("name"))//true
console.log(map.get('name'))//"马帅涛"
console.log(map.has("age"))//true;
console.log(map.get("age"))//20
console.log(map.size);//2

Map集合的forEach()方法

Map集合的forEach()方法与Set集合和数字的forEach()方法类似,回调函数都接受3个参数;

  • Map 集合中的位置(值)
  • 值对应的键名
  • Map集合本身
let map=new Map([['name','马帅涛'],['age','20']]);//初始化map方法

map.forEach((value,key,arr)=>{
    console.log(key+"=>"+value);
    console.log(arr==map)//一直相等
})
//输出name=>马帅涛
//ture;
//age=>20
//true;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值