ES6 Set 和 Map
JS 对象的键必须是字符串,但有些场景需要使用 Symbol、Number 等类型,所以引入了 Set 和 Map
Set
- Set 是类数组,由一组无序且唯一的项组成,可以将其视为一个既没有重复项也没有顺序的数组。
- 新建
let array = ([1, 2, 3, 3, [1, "4"], {test: 1}]);
let s = new Set(array)//Set(5) {1, 2, 3, Array(2), {…}}
- 数组去重 注意:Set 成员的值是唯一的,没有重复值,即使重复创建了值,也不会被存进去的,所以可以利用 Set 实现数组去重。
let array = ([1, 2, 3, 3, 4, 4, 5]);
console.log([...new Set(array)])// 返回类型是数组 [1, 2, 3, 4, 5]
- 属性和方法 属性: size:a.size 方法: add(value); delete(value); has(value): 返回 bollean clear() 遍历方法: keys(): 返回键名 rules():返回键值 entries(): 返回键值对 forEach();
const arr=['a','b','c'];
let setArr=new Set(arr);
for(let list of setArr.keys()){//keys():返回键名的遍历器
console.log(list);
//a
//b
//c
Map
- 类似于对象,键值对的集合,键的范围不限于字符串。是一种更完善的 Hash 结构的实现
- 新建,Map 接受二维数组作为参数
var m = new Map([['name', 'sds'], ['sex', 'dss']]);
console.log(m)//Map(2) {"name" => "sds", "sex" => "dss"}
如果 new Map () 的参数是个对象,会报错,需要使用 Object.entries 把对象转成数组,再传参
const obj = { foo: 'bar', baz: 42 };
const map = new Map(Object.entries(obj));//[["foo", "bar"],["baz", 42]]
map // Map { foo: "bar", baz: 42 }
Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组
- 属性:size
- 方法 set(key, val); get(key); has(key); delete(key); clear() 遍历: keys(); values(); entries(); forEach();
Map 和 Set 的区别: Set 是以[值, 值] 的方式存储元素的,Map 是[键, 值] 共同:都是存储不重复的值