Set和Map

96 阅读1分钟

Set

const set = new Set(a); // a可以为[],{},'',NAN,Number...
method:
set.add(); // 添加元素
set.delete(); // 删除元素
set.has(); // 检测是否为set成员,返回Boolean
set.clear(); // 清除所有元素
set.size(); // 获取长度
set.forEach(()=>{...}) // 同数组forEach
set.keys() // 返回键名
set.values() // 返回键值
set.entries() // 返回键值对
利用set获取数组的并,交,差集(自己常用)
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
// 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}
// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}
// (a 相对于 b 的)差集
let difference = new Set([...a].filter(x => !b.has(x)));

WeakSet

const ws = new WeakSet(a); // a为{},[]对象类型
method:
ws.add();
ws.has();
ws.delete();
ws没有size,forEach(成员间都是弱引用关系,随时可能消失)

Map

const map = new Map([['name':'Tom']]); // Map(1) {"name" => 'Tom'}
method:
map.size(); // 返回元素总数
map.has();  // 某个键是否在对象中
map.get();  // 获取键值
map.set(key,value); // 设置键值对
map.delete(); // 删除键
map.clear(); // 清除所有成员
map.keys(); // 获取键名
map.values(); // 获取键值
map.entries(); // 返回所有成员
map.forEach(); // 遍历所有成员

WeakMap

const wm = new WeakMap();
wm.set({foo:1},2); // weakMap只接受对象作为键名
wm.get();
wm.set();
wm.has();
wm.delete();
wm没有keys(),values(),entries();size()等属性