一、Set数据结构
1、基本用法
-
ES6
提供的新的数据结构,类似于数组,但是里面每个元素都是唯一的 -
Set本身是一个构造函数
-
可以接受一个数组作为参数
const set = new Set([1, 2, 3, 4, 4,4,4]); [...set]// [1, 2, 3, 4]
-
Array.from
可以将Set数据转化为数组 -
如上可得到 Set进行数组去重
[...new Set(array)] //或者 Array.from(new Set(array))
-
也可以继续字符串去重
[...new Set(str)].join()
-
⚠注意:向Set加入值得时候,并不会做隐式转化,但是加入
NaN
时会被默认为等于NaN
(本身任何NaN
都不等于任何NaN
),另外两个对象总是不相等的
2、Set的属性和实例方法
Set.prototype.add(value)
:添加某个值,返回 Set 结构本身。Set.prototype.delete(value)
:删除某个值,返回一个布尔值,表示删除是否成功。Set.prototype.has(value)
:返回一个布尔值,表示该值是否为Set
的成员。Set.prototype.clear()
:清除所有成员,没有返回值。Set.prototype.size
:返回Set
实例的成员总数。
3、遍历操作
-
Set.prototype.keys()
:返回键名的遍历器 -
Set.prototype.values()
:返回键值的遍历器 -
Set.prototype.entries()
:返回键值对的遍历器 -
Set.prototype.forEach()
:使用回调函数遍历每个成员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数据结构
1、基本用法
-
问题
对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。
-
为了解决这个问题,
ES6
提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键 -
Map 也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。
const map = new Map([ ['name', '张三'], ['title', 'Author'] ]); map.size // 2 map.has('name') // true map.get('name') // "张三" map.has('title') // true map.get('title') // "Author"
-
Map 转为数组
扩展运算符
-
Map 转为对象
遍历map转化为对象
-
对象转为 Map
对象转为 Map 可以通过
Object.entries()
let obj = {"a":1, "b":2}; let map = new Map(Object.entries(obj));
2、属性实例方法
-
size
属性返回 Map 结构的成员总数。 -
Map.prototype.set(key, value)
:set
方法设置键名key
对应的键值为value
,然后返回整个 Map 结构。如果key
已经有值,则键值会被更新,否则就新生成该键。 -
Map.prototype.get(key)
:get
方法读取key
对应的键值,如果找不到key
,返回undefined
。 -
Map.prototype.has(key)
:has
方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。 -
Map.prototype.delete(key)
delete
方法删除某个键,返回true
。如果删除失败,返回false
。 -
Map.prototype.clear()
clear
方法清除所有成员,没有返回值。
3、遍历方法
- 和Set相同