ES6之Set与Map

ES6新添加的两个数据结构Set和Map十分相似。

Set

Set本身就是一个构造函数,可以传入一个数组作为参数来构建一个Set的数据结构

		var set = new Set([1,2,3,4,5,5,5,"5",{},{}])
//向Set加入值的时候,不会发生类型转换,所以5和"5"是两个不同的值。Set内部判断两个值是否不同,使用的算法叫做“Same-value equality”,它类似于精确相等运算符(===)
//由于两个空对象不相等,所以它们被视为两个值。
		console.log(set)
		console.log(set.size)//6

Set数据结构内部不允许存在两个相同的值,这里的相同指的是严格模式下的相同,也就是“===”。

是有Set构造函数创建的Set数据结构拥有两个属性,除了一个construcut指向Set构造函数外,另外一个就是size属性。

这个Szie属性和数组的length类似。如上面的代码所示。

另外Set拥有的方法有:

  • add(value):添加某个值,返回Set结构本身。//(相当于数组的push)
  • delete(value):删除某个值,返回一个布尔值,表示删除是否成功。//(相当于数组的splice(index,1))
  • has(value):返回一个布尔值,表示该值是否为Set的成员。//(ES6中数组扩增了一个方法:includes(),返回的是一个布尔值,所以忘掉indexof()吧;
  • clear():清除所有成员,没有返回值。

 所以从上面的来看,Set和数组真的是非常像了(除了不能有相同的值存在之外)。

借用Set的不能存在相同的值的这个特性,用来给数组去重也是非常的方便。

var num = [1,2,3,4,5,5,5,5,2,2]
num =[...new Set(num)]
console.log(num)
  • keys():返回键名的遍历器
  • values():返回键值的遍历器(因为Set数据结构是没有键名(或者说键名键值一样)的,所以keys()和values()随便用吧,效果一样;)
  • entries():返回键值对的遍历器
  • forEach():使用回调函数遍历每个成员

需要注意的是entries()

let set = new Set(['red', 'green', 'blue']);

for (let item of set.keys()) {
  console.log(item);
}
// red
// green
// blue

for (let item of set.values()) {
  console.log(item);
}
// red
// green
// blue

for (let item of set.entries()) {
  console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]

Map

 Map和Obeject相比,更适合键值对的数据结构模式。因为Map可以使用对象作为键名,虽然Obeject也可以将对象作为键名,但是容易被其他的同类的实例所引用。(ES6文档有Demo)

而在Map中使用对象作为键值对的键,就不会出现这种情况。

			var obj ={name:'Dell',gender:'Man'}
			var _obj={name:'Dell',gender:'Man'}
			var map = new Map();
			map.set(obj,1);
			console.log(map);
			console.log(map._obj);//undefined

因为两个的对象的指向不相同。

Map的属性有:size(和Set一样)。

方法有set(key,value)set方法返回的是Map本身,因此可以采用链式写法。

get(key)get方法读取key对应的键值,如果找不到key,返回undefined

has(key)has方法返回一个布尔值,表示某个键是否在Map数据结构中。

delete(key)delete方法删除某个键,返回true。如果删除失败,返回false。

clear()clear方法清除所有成员,没有返回值

Map原生提供三个遍历器生成函数和一个遍历方法。

  • keys():返回键名的遍历器。
  • values():返回键值的遍历器。
  • entries():返回所有成员的遍历器。
  • forEach():遍历Map的所有成员。

使用扩展运算符,可以将Map类型的数据转换为一个二维数组

 

你可能感兴趣的:(JS,学习心得)