Set和Map
Set和Map
- Set 和 Map 是 ES6 新增的两个数据类型
- 都是属于内置构造函数
- 使用 new 的方式来实例化使用
Set
-
使用方式就是和 new 连用
const s = new Set() console.log(s) /* Set(0) {} size: (...) __proto__: Set [[Entries]]: Array(0) length: 0 */ -
就是一个数据集合
-
我们可以在 new 的时候直接向内部添加数据
// 实例化的时候直接添加数据要以数组的形式添加 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: 1 1: 2 2: 3 3: Object 4: function () {} 5: true 6: "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: 是删除该数据结构中的某一个数据const s = new Set() s.add(0) s.add({}) s.add(function () {}) s.delete(0) console.log(s.size) // 2 -
clear: 清空数据结构中的所有数据const s = new Set() s.add(0) s.add({}) s.add(function () {}) s.clear() console.log(s.size) // 0 -
has: 查询数据解构中有没有某一个数据const s = new Set() s.add(0) s.add({}) s.add(function () {}) console.log(s.has(0)) // true -
forEach: 用来遍历 Set 数据结构的方法const s = new Set() s.add(0) s.add({}) s.add(function () {}) s.forEach(item => { console.log(item) // 0 {} function () {} }) -
方法介绍的差不多了,有一个问题出现了,那就是
-
我们的方法要么是添加,要么是删除,要么是查询,没有获取
-
因为要获取 Set 结构里面的数据需要借助一个
...展开运算符 -
把他里面的东西都放到一个数组里面去,然后再获取
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 不允许存储重复的数据
const s = new Set([1, 2, 3]) s.add(4) // 此时 size 是 4 s.add(1) // 此时 size 是 4 s.add(2) // 此时 size 是 4 s.add(3) // 此时 size 是 4
Map
-
也是要和 new 连用
-
是一个数据集合,是一个很类似于 对象 的数据集合
const m = new Map() console.log(m) /* Map(0) {} size: (...) __proto__: Map [[Entries]]: Array(0) length: 0 */ -
我们的对象中不管存储什么,key 一定是一个字符串类型
-
但是再 Map 里面,我们的 key 可以为任意数据类型
-
我们也管 Map 叫做 (值 = 值 的数据类型)
const 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: true value: 1 length: 3 */
常用方法和属性
-
size: 用来获取该数据类型中数据的个数const m = new Map([[{}, {}], [function () {}, function () {}], [true, 1]]) console.log(m.size) // 3 -
delete: 用来删除该数据集合中的某一个数据const m = new Map([[{}, {}], [function () {}, function () {}], [true, 1]]) m.delete(true) console.log(m.size) // 2 -
set: 用来向该数据集合中添加数据使用const m = new Map() m.set({ name: 'Jack' }, { age: 18 }) console.log(m.size) // 1 -
get: 用来获取该数据集合中的某一个数据const m = new Map() m.set({ name: 'Jack' }, { age: 18 }) m.set(true, function () {}) console.log(m.get(true)) // function () {} -
clear: 清除数据集合中的所有数据const m = new Map() m.set({ name: 'Jack' }, { age: 18 }) m.set(true, function () {}) m.clear() console.log(m.size) // 0 -
has: 用来判断数据集合中是否存在某一个数据const m = new Map() m.set({ name: 'Jack' }, { age: 18 }) m.set(true, function () {}) console.log(m.has(true)) // true
评论留言:
昵称: