6.数据结构——Set
集合的基本概念:集合是由一组无序且唯一(即不能重复)的项组成。这个数据结构使用了与有限集合相同的数学概念,应用在计算机的数据结构中。
特点:key和value相同,没有重复的value。
- ES6提供了数据结构Set。它类似于数组,但成员值唯一的,没有重复的值
- 如何创建一个Set
const s= new Set([1, 2, 3]); console.log(s);
- Set类的属性
- size:类似于数组的length
- Set类的方法
-
set.add(value)
:添加一个数据,返回Set结构本身“`
s.add('a'); //向数组添加a这一元素
s.add('b').add('c').add('d'); //链式添加
“` -
set.delete(value)
:删除指定数据,返回一个布尔值,表示是否删除成功“`
console.log(s.delete('a')); //删除a,成功删除返回true,否则返回false
“` -
set.has(value)
:判断该值是否为Set的成员,返回一个布尔值“`
console.log(s.has( 'a')); // 判断s中是否含有a这一元素,有则返回true,反之返回false
“` -
set.clear()
:清除所有数据,没有返回值 -
keys()
返回键名的遍历器 -
values()
:返回键值的遍历器 -
entries()
:返回键值对的遍历器 -
foreach()
:使用回调函数遍历每个成员
7.数据结构——Map
字典:是用来存储不重复key的Hash结构。不同于集合(Set)的是,字典使用的是[键,值]的形式来存储数据的。
**Object对象 **:JavaScript 的对象(Object: {})只能用字符串当作键,这给他的使用带来很大的限制。
Map:为了解决这个问题,ES6提供了Map数据结构。他类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当做键。也就是说,Object结构提供了“字符串——值”的对应,Map结构提供了“值——值”的对应,是一种完善的Hash结构实现。如果你需要“键值对应的数据结构,Map比Object更加适合。
- 如何创建一个Map
var map = new Map([ ['a', 1], ['b', 2] ]);
- Map 类的属性
- size:类似于数组的length
- Map 类的方法
-
map.set(key, value)
:设置键名key对应的键值为value,然后返回整个Map结构。如果key已经有值,则键值会被更新,否则就会生成新的键该键。“`
map.set('fengya', 'shuai').set('new', 'fq');
“` -
map.get(key)
:get方法获取key对应的键值,如果找不到key,返回undefined。 -
map.delete(key)
:删除某个键,返回true,如果删除失败则返回false。 -
map.has(key)
:返回一个布尔值,表示某个键是否存在当前Map对象之中。 -
map.clear()
:清除所有数据,没有返回值。 -
map.keys()
:遍历所有的键名,并将其返回。 -
map.values()
:遍历所有的键值,并将其返回。 -
map.entries()
:遍历所有的键名与键值,并将其返回。 -
map.forEach()
:使用回调函数遍历每个成员。
-
实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <script> const Person = (function(){ // 把对象与某个性别联系起来 let _gender = new Map(); function P(name, gender){ this.name = name; _gender.set(this, gender); } // 获取私有属性 P.prototype.getGender = function(){ return _gender.get(this); } // 修改私有属性 P.prototype.setGender = function(newGender){ return _gender.set(this, newGender); } // P.getGenders = function(){ // return _gender; // } return P; })(); let p1 = new Person('风雅', '男'); let p2 = new Person('Clairoll', '男'); p1.setGender('女'); console.log(p1.getGender()); // 女 console.log(p2.getGender()); // 男 </script> </body> </html>
-
使用注意事项:
- map的键名跟内存地址绑定,只要内存地址不一样,则就代表不同的键名
- map里面的key的排列顺序是按照添加顺序进行排列的。