ES6新增数据结构-set与map

ES6新增数据结构-set与map

1.Set
*Set是ES6新增的一种数据类型,怎么将它与对象数组区分呢使用typeof set对象 返回的是object:

let set=new Set();
console.log(typeof set);  //object

这种方法并不能将区分,应该使用到:Object原型上的toString方法,toString方法会将调用该方法的对象以字符串形式返回。利用这个特性,再结合call方法改变this的指向,即可。

let  set=new Set();
console.log(Object.prototype.toString.call(set));//[objetc  set]

这样就能正确的区分。

*怎么使用Set:

  1. 实例化Set对象:
 let   set =new Set();//可以传参数,

这里的参数有点讲究,来看一下先传一个数字。

let set2=new Set(123);  
console.log(set2)//这里会报错
//报错信息: Uncaught TypeError: (var)[Symbol.iterator] is not a function
//意思是说 传入的参数没有 Symbol.iterator (遍历器)这个方法;

看到这个报错信息,是不是有点眼熟?在哪里见过呢,来看一下下面的代码:

let num=123;
let str='123';
for(let i of  str){
	console.log(i); //  1   2   3    (字符串)
}
for(let j of num){
	console.log(j);//报错
}
//报错信息:Uncaught TypeError: num[Symbol.iterator] is not a function
//是不是发现与上面set的报错信息基本一致。

为了得出结论,我再将可以用for of 遍历的值均作为参数传入Set的构造函数,发现都不会报错。而不能使用for of 遍历的值也均不能作为参数。

let set2=new Set('123');
console.log(set2);//    {‘1’,‘2’,‘3’}

let  set3=new Set([1,2,3]);
console.log(set3);//   {1,2,3}

let set4=new Set({0:'1',1:'2'});
console.log(set4); //报错
//报错信息:Uncaught TypeError: (var)[Symbol.iterator] is not a function
对象是不能使用for of 遍历的。

let  set5=new Set(set3);
console.log(set5);// {1,2,3}
//Set 对象是可以使用 for  of遍历的

let map=new Map();
map.set('123',123);
let set5=new Set(map);
console.log(set5);  // {['123',123]}
//连map对象都能接受,因为map也能使用for   of  遍历。

所以Set对象构造函数能接受的参数为可以使用for of 遍历的数据,而能使用for of 遍历的数据,是该数据原型上有 Symbol.iterator 遍历器 方法。而有这个方法的数据有 : Set Map Array String

2.获得Set对象的长度:

set.size      //set对象的size属性

3.为Set对象添加元素:

set.add(newValue);  //利用set的add方法,该方法会返回set对象,所以可以连用。
set.add(...).add(...).add(...)

需要注意的是,set对象内的数据都是唯一的,所以如果添加set内含有的值,则不会再追加。

4.删除Set对象内指定的值:

set.delete(value);  

5.取Set对象内的值:可以使用解构 也可以使用for of 遍历

let  set=new Set([1,2,3]);
let  arr=[...set];
console.log(arr);//[1,2,3]

6.Set的作用:可以利用Set对象的特性(唯一性)用来数组去重;
将需要去重的数组,作为参数传入Set构造函数即可。

let  arr=[111,222,333,222];
let set=new Set(arr);
let arr2=[...set];
console.log(arr2);//[1,2,3]

2.Map
1.Map的实例化:
构造函数参数,只接受二维数组

let map=new Map([[1,2],['a','c']]);
console.log(map);//  {1=>2,'a'=>'c'}

2.Map添加属性:

map.set(name,value);
//如果name是map内有的,则会把之前name对应的数据覆盖。

3.删除Map属性:

map.delete(name);//参数为属性名

4.获取长度:

map.size  

5.获取数据:

map.get(name);

6.遍历:

for(let  [k,v]   of    map){
	console.log(k,v);
}
k为属性名,v为值。

猜你喜欢

转载自blog.csdn.net/qq_41709082/article/details/84583925
今日推荐