Set和Map数据结构

Set

ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值,所以可以给数组去重。
Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化。

{
  let list = new Set();
  list.add(5);
  list.add(7);
  console.log('size',list.size);//size 2
}
{
  let arr = [1,2,3,4,5];
  let list = new Set(arr);
  console.log('size',list.size);//size 5
}

四个操作方法:
add(value):添加某个值,返回Set结构本身。
delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
has(value):返回一个布尔值,表示该值是否为Set的成员。
clear():清除所有成员,没有返回值

set内部的元素可以遍历用for...of...,forEach遍历Set

{
  let arr=['add','delete','clear','has'];
  let list=new Set(arr);

  for(let key of list.keys()){
    console.log('keys',key);//keys add keys delete keys clear  keys has
  }
  for(let value of list.values()){
    console.log('value',value);////keys add keys delete keys clear  keys has
  }
  for(let [key,value] of list.entries()){
    console.log('entries',key,value);////keys add add  keys delete delete  keys clear clear  keys has has
  }

  list.forEach(function(item){console.log(item);})//add delete clear has
}
{
//说明每个值都是唯一的
  let list = new Set();
  list.add(1);
  list.add(2);
  list.add(1);
  console.log('list',list);//list中只用1和2两个值,重复添加的数字不会报错只是不生效,这样就可以用来数组去重

  let arr=[1,2,3,1,2];
  let list2=new Set(arr);
  console.log('unique',list2);//unique set{1,2,3} ,但不会做数据类型的处理

  let arr2=["value1", "value2", "value3"];
  let list2=new Set(arr2);
  console.log(list2.has("value1"));//true
  
  //String相关
  let text = 'India';
  let mySet = new Set(text);  // Set {'I', 'n', 'd', 'i', 'a'}
  mySet.size;  // 5
  // 大小写敏感 & duplicate ommision
  new Set("Firefox")  // Set(7) [ "F", "i", "r", "e", "f", "o", "x" ]
  new Set("firefox")  // Set(6) [ "f", "i", "r", "e", "o", "x" ]
}
weakset

WeakSet结构与Set类似,也是不重复的值的集合。

WeakSet和Set的区别:
·WeakSet的成员只能是对象,而不能是其他类型的值
·WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于WeakSet之中。这个特点意味着,无法引用WeakSet的成员,因此WeakSet是不可遍历的。
·没有clear方法,没有size属性,不能遍历

{
  let weakList=new WeakSet();
  let arg={};
  weakList.add(arg);
  // weakList.add(2);
  console.log('weakList',weakList); //weakList weakest{object{}}
}
Map

Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现。如果你需要“键值对”的数据结构,Map比Object更合适。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键,所以Map对比object最大的好处就是,key不受类型限制

实例属性和方法:size、set、get、has、delete、clear
遍历方法:keys()、values()、entries()、forEach()、for...of...

{
  let map = new Map();
  let arr=['123'];
  map.set(arr,456);
  console.log('map',map,map.get(arr));//map Map{["123"] => 456} 456
}
{
  let map = new Map([['a',123],['b',456]]);
  console.log('map args',map);//map args Map{"a"=>123,"b"=>456}
  console.log('size',map.size);//size 2
  console.log('delete',map.delete('a'),map);//delete Map{]"b"=>456}
  console.log('clear',map.clear(),map);//clear Map{}
 
 for (let [key, value] of map.entries()) {
    console.log(key + " = " + value);
  }
  map.forEach((value,key) => {
    console.log('key='+key+',value='+value)//key=a,value=123 key=b,value=456
  })
}
weakmap

weakmap所接收的key也必须是对象,不能是其他的
也没有set属性,没有size方法,不能遍历

{
  let weakmap=new WeakMap();
  let o={};
  weakmap.set(o,123);
  console.log(weakmap.get(o));//123
}

建议看阮一峰老师的文章:Set 和 Map 数据结构

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.Set 基本用法 ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本...
    雨飞飞雨阅读 1,873评论 0 7
  • Set 基本用法 ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是...
    oWSQo阅读 813评论 0 1
  • 1. Set (1) 基本用法 ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复...
    __越过山丘__阅读 373评论 0 0
  • 闻香 是岁月的积淀 融化在锅碗瓢盆的碰撞 手起刀落间 丝如细雨 丁似玲珑 条为玉玺 块若琥珀 满盘剔透晶莹里 是功...
    用智慧征服人生阅读 215评论 0 0
  • 作为一名设计人员,深知人性化设计的重要性,人性化设计旨在方便受众,通过人性化设计改变人们所面临的困境和不便,使人们...
    世界之大12阅读 169评论 0 0