【ES6】Set 和 Map

177 阅读1分钟

ES6 Set 和 Map

JS 对象的键必须是字符串,但有些场景需要使用 Symbol、Number 等类型,所以引入了 Set 和 Map

Set

  1. Set 是类数组,由一组无序且唯一的项组成,可以将其视为一个既没有重复项也没有顺序的数组。
  2. 新建
	let array = ([1, 2, 3, 3, [1, "4"], {test: 1}]);
	let s = new Set(array)//Set(5) {1, 2, 3, Array(2), {…}}
  1. 数组去重 注意:Set 成员的值是唯一的,没有重复值,即使重复创建了值,也不会被存进去的,所以可以利用 Set 实现数组去重。
	let array = ([1, 2, 3, 3, 4, 4, 5]);
	console.log([...new Set(array)])// 返回类型是数组  [1, 2, 3, 4, 5]
  1. 属性和方法 属性: 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

  1. 类似于对象,键值对的集合,键的范围不限于字符串。是一种更完善的 Hash 结构的实现
  2. 新建,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()方法返回一个给定对象自身可枚举属性的键值对数组

  1. 属性:size
  2. 方法 set(key, val); get(key); has(key); delete(key); clear() 遍历: keys(); values(); entries(); forEach();

Map 和 Set 的区别: Set 是以[值, 值] 的方式存储元素的,Map 是[键, 值] 共同:都是存储不重复的值