您的位置:首页 > 理论基础 > 数据结构算法

ECMAScript 6 学习笔记----set和map数据结构

2016-10-10 09:52 309 查看
1.Set

ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

Set本身是一个构造函数,用来生成Set数据结构。
var s = new Set();

[2, 3, 5, 4, 5, 2, 2].map(x => s.add(x));

for (let i of s) {
console.log(i);
}
// 2 3 5 4

Set实例的属性和方法

Set结构的实例有以下属性。
Set.prototype.constructor
:构造函数,默认就是
Set
函数。
Set.prototype.size
:返回
Set
实例的成员总数。

Set实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。下面先介绍四个操作方法。
add(value)
:添加某个值,返回Set结构本身。
delete(value)
:删除某个值,返回一个布尔值,表示删除是否成功。
has(value)
:返回一个布尔值,表示该值是否为
Set
的成员。
clear()
:清除所有成员,没有返回值。

Set结构的实例有四个遍历方法,可以用于遍历成员。
keys()
:返回键名的遍历器
values()
:返回键值的遍历器
entries()
:返回键值对的遍历器
forEach()
:使用回调函数遍历每个成员
需要特别指出的是,
Set
的遍历顺序就是插入顺序。
2.WeakSet

WeakSet结构与Set类似,也是不重复的值的集合。但是,它与Set有两个区别。

首先,WeakSet的成员只能是对象,而不能是其他类型的值。

其次,WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用
3.map

JavaScript的对象(Object),本质上是键值对的集合(Hash结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。ES6提供了Map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应

Map的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键。这就解决了同名属性碰撞(clash)的问题。

var map = new Map();

var k1 = ['a'];
var k2 = ['a'];

map
.set(k1, 111)
.set(k2, 222);

map.get(k1) // 111
map.get(k2) // 222

map实例的属性和方法

(1)size属性

(2)set(key,
value)

(3)get(key)

(4)has(key)

(5)delete(key)

(6)clear()
遍历方法

Map原生提供三个遍历器生成函数和一个遍历方法。
keys()
:返回键名的遍历器。
values()
:返回键值的遍历器。
entries()
:返回所有成员的遍历器。
forEach()
:遍历Map的所有成员。
需要特别注意的是,Map的遍历顺序就是插入顺序。
map可以与其他数据结构相互转换
(1)Map与数组转换

(2)Map与对象转换,如果所有Map的键都是字符串,它可以转为对象

(3)Map与JSON互转。

4.WeakMap
WeakMap
结构与
Map
结构基本类似,唯一的区别是它只接受对象作为键名(
null
除外),不接受其他类型的值作为键名,而且键名所指向的对象,不计入垃圾回收机制。

学习文档:ECMAScript 入门----阮一峰
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息