一、Set类
1、定义
Set是es6新增的数据结构,类似于数组,但没有索引或顺序,不允许重复,我们一般称为集合
Set本身是一个构造函数,用来生成 Set 数据结构
let s = new Set()
// 参数必须是一个可迭代对象,可用于去重
let unique = new Set("set")
// ['s','e','t']
2、属性&方法
-
属性
size:返回集合所包含的元素个数
-
操作方法
add(value) 添加元素,返回Set本身
delete(value) 删除某个元素 返回布尔值,表示是否删除成功
has(value) 判断Set结构是否包含某个值, 返回布尔值
clear() 清除所有成员 无返回值 (有无参数均清空)
let set = new Set(); console.log(set.add(1).add(2)); // Set [ 1, 2 ] console.log(set.delete(2)); // true console.log(set.has(2)); // false console.log(set.clear()); // undefined console.log(set.has(1)); // false console.log(set.size); // 0 -
遍历方法
keys() 返回键名
values() 返回键值
entries() 返回键值对
forEach() 循环遍历每一项 无返回值
3、应用
-
数组去重 (Array.from()将Set类数组转化为真实的数组)
const arr = [3,4,7,4,5,7,8]; const setArr = new Set(arr); // Set [3,4,7,5,8] const endArr = Array.from(setArr); // [3,4,7,5,8] const endArr1 = [ ...setArr] ; // [3,4,7,5,8]
二、Map
1、定义
Map类型是键值对的有序列表,而键和值都可以是任意类型;
Map本身是一个构造函数,用来生成 Map 数据结构
const m = new Map({p: 'Hello World'})
2、属性&方法
-
属性
size 返回字典包含的元素个数
-
操作方法
set(key, value) 添加元素 相同的key 后添加的会替代前面添加的 返回map结构本身 get(key) 获取元素值 返回对应的value 没有返回undefined delete(key) 删除元素 返回布尔值 是否删除成功 has(key) 判断字典中是存在某个键 返回布尔值 clear() 删除全部 无返回值
let m = new Map(); m.set('qu', 'hui'); m.set('qu', 'cute'); m.set(true, '真的boolean'); console.log(m.size); // 2 console.log(m.has('qu')); // true console.log(m.keys()); // [ 'Jay', 'true' ] console.log(m.values()); // [ 'cute', '真的boolean' ] console.log(m.get('xu')); // undefined console.log(m.get('qu')); // cute m.delete(true); console.log(m.keys()); // [ 'qu' ] console.log(m.values()); // [ 'cute' ]二维数组
var m = new Map([['name', 'zhangsan'],['sex', 'male']]); console.log(m); //Map {"name" => "zhangsan", "sex" => "male"} -
遍历方法
Map结构原生提供三个遍历器生成函数和一个遍历方法:keys():返回键名的遍历器
values():返回键值的遍历器
entries():返回所有成员的遍历器
forEach():遍历 Map 的所有成员
var map = new Map([['age', 18],['weight', 95]]); for (let key of map.keys()) { console.log(key); // age weight } for (let value of map.values()) { console.log(value); //18 95 } for (let item of map.entries()) { console.log(`${ item[0] }: ${ item[1] }`); //age: 18 weight: 95 } for (let [key, value] of map.entries()) { console.log(`${ key }: ${ value }`); //age: 18 weight: 95 } for (let [key, value] of map) { console.log(`${ key }: ${ value }`); //age: 18 weight: 95 } map.forEach((value, key, map) => { console.log(`${ key }: ${ value }`); //age: 18 weight: 95 });
三、Set、Map区别
-
共同点:集合、字典可以存储不重复的值
-
不同点:集合是以[值,值]的形式存储元素,字典是以[键,值]的形式存储