Set
Set是什么
// 1.什么是 Set// 集合// [1, 2];// 数组是一系列有序的数据集合// Set 是一系列无序、没有重复值的数据集合// 2.理解 Set// console.log([1, 2, 1]);// console.log(new Array(1, 2, 1));const s = new Set();s.add(1);s.add(2);// // Set 中不能有重复的成员s.add(1);console.log(s);// Set 没有下标去标示每一个值,所以 Set 是无序的,也不能像数组那样通过下标去访问 Set 的成员
Set实例的方法和属性
// 1.方法// addconst s = new Set();s.add(1).add(2).add(2);// console.log(s);// has// console.log(s.has(1));// console.log(s.has(3));// delete// s.delete(1);// // 使用 delete 删除不存在的成员,什么都不会发生,也不会报错// s.delete(3);// console.log(s);// clear// s.clear();// console.log(s);// forEach// s.forEach(function (value, key, set) {// // Set 中 value = key// // console.log(value, key, set === s);// // console.log(this);// }, document);// console.log(s);// 按照成员添加进集合的顺序遍历// 2.属性// sizeconsole.log(s.size);console.log(s);
Set构造函数的参数
// 1.数组// const s = new Set([1, 2, 1]);// console.log(s);// 2.字符串、arguments、NodeList、Set 等// console.log(new Set('hi'));// function func() {// console.log(new Set(arguments));// }// func(1, 2, 1);console.log(new Set(document.querySelectorAll('p')));const s = new Set([1, 2, 1]);console.log(new Set(s) === s);console.log(s);
Set的注意事项
// 1.判断重复的方式// const s = new Set([1, 2, 1]);// const s = new Set([NaN, 2, NaN]);// console.log(1 === 1);// console.log(NaN === NaN);// Set 对重复值的判断基本遵循严格相等(===)// 但是对于 NaN 的判断与 === 不同,Set 中 NaN 等于 NaN// console.log(s);// const s = new Set();// s.add({}).add({});// console.log({} === {});// console.log(s);// 2.什么时候使用 Set// ① 数组或字符串去重时// ② 不需要通过下标访问,只需要遍历时// ③ 为了使用 Set 提供的方法和属性时(add delete clear has forEach size 等)
Set的应用
// 1.数组去重// [1, 2, 1];// const s = new Set([1, 2, 1]);// console.log(s);// s.forEach// console.log(...s);// console.log([...s]);// console.log([...new Set([1, 2, 1])]);// 2.字符串去重// 'abbacbd';// const s = new Set('abbacbd');// console.log([...s].join(''));// console.log(s);// console.log([...new Set('abbacbd')].join(''));// 3.存放 DOM 元素// console.log(document.querySelectorAll('p'));// for()const s = new Set(document.querySelectorAll('p'));console.log(s);s.forEach(function (elem) {// console.log(elem);elem.style.color = 'red';elem.style.backgroundColor = 'yellow';});
Map
Map是什么
// 1.认识 Map// 映射// Map 和对象都是键值对的集合// 键->值,key->value// const person = {// name: 'alex',// age: 18// };// const m = new Map();// m.set('name', 'alex');// m.set('age', 18);// console.log(m);// 2.Map 和对象的区别// 对象一般用字符串当作键// const obj = {// name: 'alex',// true: 'true',// [{}]: 'object'// };// console.log(obj);// console.log({}.toString());// 基本数据类型:数字、字符串、布尔值、undefined、null// 引用数据类型:对象([]、{}、函数、Set、Map 等)// 以上都可以作为 Map 的键const m = new Map();m.set('name', 'alex');m.set(true, 'true');m.set({}, 'object');m.set(new Set([1, 2]), 'set');m.set(undefined, 'undefined');console.log(m);
Map实例的属性和方法
// 1.方法// setconst m = new Map();// 使用 set 添加的新成员,键如果已经存在,后添加的键值对覆盖已有的m.set('age', 18).set(true, 'true').set('age', 20);// console.log(m);// set get// add// get// console.log(m);// console.log(m.get('age'));// // get 获取不存在的成员,返回 undefined// console.log(m.get('true'));// console.log(m.get(true));// has// console.log(m.has('age'));// console.log(m.has('true'));// delete// m.delete('age');// m.delete('name');// // 使用 delete 删除不存在的成员,什么都不会发生,也不会报错// console.log(m);// clear// m.clear();// console.log(m);// forEach// m.forEach(function (value, key, map) {// // console.log(value, key, map === m);// console.log(this);// }, document);// 2.属性// size// 对象没有类似的属性console.log(m.size);
Map构造函数的参数
// 1.数组// console.log(new Map(['name', 'alex', 'age', 18]));// 只能传二维数组,而且必须体现出键和值// console.log(// new Map([// ['name', 'alex'],// ['age', 18]// ])// );// 2.Set、Map 等// Set// Set 中也必须体现出键和值const s = new Set([['name', 'alex'],['age', 18]]);console.log(new Map(s));console.log(s);// Map// 复制了一个新的 Mapconst m1 = new Map([['name', 'alex'],['age', 18]]);console.log(m1);const m2 = new Map(m1);console.log(m2, m2 === m1);
Map的注意事项
// 1.判断键名是否相同的方式// 基本遵循严格相等(===)// 例外就是 NaN,Map 中 NaN 也是等于 NaNconsole.log(NaN === NaN);const m = new Map();m.set(NaN, 1).set(NaN, 2);console.log(m);// 2.什么时候使用 Map// 如果只是需要 key -> value 的结构,或者需要字符串以外的值做键,使用 Map 更合适// forEach for in// size// 只有模拟现实世界的实体时,才使用对象const person = {};
Map的应用
const [p1, p2, p3] = document.querySelectorAll('p');// console.log(p1, p2, p3);// const m = new Map();// m.set(p1, 'red');// m.set(p2, 'green');// m.set(p3, 'blue');const m = new Map([[p1,{color: 'red',backgroundColor: 'yellow',fontSize: '40px'}],[p2,{color: 'green',backgroundColor: 'pink',fontSize: '40px'}],[p3,{color: 'blue',backgroundColor: 'orange',fontSize: '40px'}]]);m.forEach((propObj, elem) => {for (const p in propObj) {elem.style[p] = propObj[p];}});// m.forEach((color, elem) => {// elem.style.color = color;// });console.log(m);
