- Map 和 Set 是 ES6 新增的两个数据类型
- 都是属于内置构造函数
- 使用 new 的方式来实例化使用
Set
- 使用方式就是和 new 连用 ```javascript const s = new Set() console.log(s)
/ Set(0) {} size: (…) proto: Set [[Entries]]: Array(0) length: 0 /
- 就是一个数据集合- 我们可以在 new 的时候直接向内部添加数据```javascript// 实例化的时候直接添加数据要以数组的形式添加const s = new Set([1, 2, 3, {}, function () {}, true, 'hwllo'])console.log(s)/*Set(7) {1, 2, 3, {…}, ƒ, …}size: (...)__proto__: Set[[Entries]]: Array(7)0: 11: 22: 33: Object4: function () {}5: true6: "hwllo"length: 7*/
- 看上去是一个类似数组的数据结构,但是不是,就是 Set 数据结构
常用方法和属性
size: 用来获取该数据结构中有多少数据的const s = new Set([1, 2, 3, {}, function () {}, true, 'hwllo'])console.log(s.size) // 7
- 看上去是一个和数组数据类型差不多的数据结构,而且我们也看到了 length 属性
- 但是不能使用,想要获取该数据类型中的成员数量,需要使用 size 属性
add: 用来向该数据类型中追加数据const s = new Set()s.add(0)s.add({})s.add(function () {})console.log(s.size) // 3
- 这个方法就是向该数据类型中追加数据使用的
delete: 是删除该数据结构中的某一个数据 ```javascript const s = new Set() s.add(0) s.add({}) s.add(function () {})
s.delete(0)
console.log(s.size) // 2
- `clear` : 清空数据结构中的所有数据```javascriptconst s = new Set()s.add(0)s.add({})s.add(function () {})s.clear()console.log(s.size) // 0
has: 查询数据解构中有没有某一个数据 ```javascript const s = new Set() s.add(0) s.add({}) s.add(function () {})
console.log(s.has(0)) // true
- `forEach` : 用来遍历 Set 数据结构的方法```javascriptconst s = new Set()s.add(0)s.add({})s.add(function () {})s.forEach(item => {console.log(item) // 0 {} function () {}})
- 方法介绍的差不多了,有一个问题出现了,那就是
- 我们的方法要么是添加,要么是删除,要么是查询,没有获取
- 因为要获取 Set 结构里面的数据需要借助一个
...展开运算符 - 把他里面的东西都放到一个数组里面去,然后再获取 ```javascript const s = new Set([1, 2, 3, 4, 5, 6]) const a = […s] console.log(a) // (6) [1, 2, 3, 4, 5, 6]
console.log(a[0]) // 1 console.log([…s][0]) // 1
- 又一个问题出现了,new 的时候需要以数组的形式传递- 然后获取的时候又要转成数组的形式获取- 那么我为什么不一开始就定义数组,要这个 Set 数据类型干什么- 这就不得不提到一个 Set 的特点- **Set 不允许存储重复的数据**```javascriptconst s = new Set([1, 2, 3])s.add(4) // 此时 size 是 4s.add(1) // 此时 size 是 4s.add(2) // 此时 size 是 4s.add(3) // 此时 size 是 4
Map
- 也是要和 new 连用
- 是一个数据集合,是一个很类似于 对象 的数据集合 ```javascript const m = new Map() console.log(m)
/ Map(0) {} size: (…) proto: Map [[Entries]]: Array(0) length: 0 /
- 我们的对象中不管存储什么,key 一定是一个字符串类型- 但是再 Map 里面,我们的 key 可以为任意数据类型- 我们也管 Map 叫做 (值 = 值 的数据类型)```javascriptconst m = new Map([[{}, {}], [function () {}, function () {}], [true, 1]])console.log(m)/*Map(3) {{…} => {…}, ƒ => ƒ, true => 1}size: (...)__proto__: Map[[Entries]]: Array(3)0: {Object => Object}key: {}value: {}1: {function () {} => function () {}}key: ƒ ()value: ƒ ()2: {true => 1}key: truevalue: 1length: 3*/
常用方法和属性
size: 用来获取该数据类型中数据的个数const m = new Map([[{}, {}], [function () {}, function () {}], [true, 1]])console.log(m.size) // 3
delete: 用来删除该数据集合中的某一个数据 ```javascript const m = new Map([[{}, {}], [function () {}, function () {}], [true, 1]]) m.delete(true)
console.log(m.size) // 2
- `set` : 用来向该数据集合中添加数据使用```javascriptconst m = new Map()m.set({ name: 'Jack' }, { age: 18 })console.log(m.size) // 1
get: 用来获取该数据集合中的某一个数据 ```javascript const m = new Map()
m.set({ name: ‘Jack’ }, { age: 18 }) m.set(true, function () {}) console.log(m.get(true)) // function () {}
- `clear` : 清除数据集合中的所有数据```javascriptconst m = new Map()m.set({ name: 'Jack' }, { age: 18 })m.set(true, function () {})m.clear()console.log(m.size) // 0
has: 用来判断数据集合中是否存在某一个数据 ```javascript const m = new Map()
m.set({ name: ‘Jack’ }, { age: 18 }) m.set(true, function () {})
console.log(m.has(true)) // true ```
