let ary = [1,2,3,4,4,4,4]; let setData = new Set(); ary.forEach((p) => { setData.add(p) }) console.log(setData) // [1,2,3,4]
let setData = new Set([1,2,3,4,4,4,4]); // [1,2,3,4] let setDiv = new Set(document.getElementsByTagName('div'))
let ary = [NaN,NaN,NaN,5,'5',{},{}] let setData = new Set(ary);// [NaN,5,'5',{},{}]
// 数组去重 let ary = [1,2,3,3,3,3]; let setData = new Set(ary); ary =Array.from(setData); // 结合扩展运算符 let arr = [1,2,3,3,3,3]; let unique = [...new Set(arr)];
数组的map和filter也能够间接用于set数据,先将set数据转化成数组,在使用map等数组方法数组
因此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} // 差集 let difference = new Set([...a].filter(x => !b.has(x))); // Set {1}
let mapData = new Map([ ['name','zhan'] //双元素 ]); mapData.get('name') // 'zhan'
let mapData = new Map(); mapData.set('name', 'zhan').set('name', 'hui'); mapData.get('name'); //'hui'
let mapData = new Map().get('name'); // undefined
//下面两个对象对应的内存地址不一样, let mapData = new Map(); mapData.set({},'zhan'); mapData.get({}); //undefined
let map = new Map(); map.set(-0, 123); map.get(+0) // 123 map.set(true, 1); map.set('true', 2); map.get(true) // 1 map.set(undefined, 3); map.set(null, 4); map.get(undefined) // 3 map.set(NaN, 123); map.get(NaN) // 123
let mapData = new Map([ ['name', 'zhan'], ['age', 25], ['sex', 'boy'] ]); let ary = [...mapData.keys()]; // ['name','age','sex']; let ary_ =[...mapData.entries()]; // [['name', 'zhan'],['age', 25],['sex', 'boy']] let ary__ =[...mapData]; // [['name', 'zhan'],['age', 25],['sex', 'boy']]
const map0 = new Map() .set(1, 'a') .set(2, 'b') .set(3, 'c'); const map1 = new Map( [...map0].filter(([k, v]) => k < 3) );
let myElement = document.getElementById('logo'); let myWeakmap = new WeakMap(); myWeakmap.set(myElement, {timesClicked: 0}); myElement.addEventListener('click', function() { let logoData = myWeakmap.get(myElement); logoData.timesClicked++; }, false);