set的用法
- 自动去掉重复元素,无序
创建:
const p = new Set([ //Set大写,多个词要加括号
'Pasta',
'Pizza',
'Pizza',
'Risotto',
'Pasta',
'Pizza',
]);
常见函数
- p.size; //返回set大小
- p.has(); //返回是否存在传入的元素,bool值
- p.add();
- p.delete();
- p.clear(); //清除全部
巧用:
去除数组的重复元素,再放入新数组:
const staff = ['Waiter', 'Chef', 'Waiter', 'Manager', 'Chef', 'Waiter'];
const staffUnique = [...new Set(staff)];
console.log(staffUnique);
Map
创建
const rest = new Map();
rest.set('name', 'Classico Italiano'); //set向map插入元素
rest.set(1, 'Firenze, Italy');
console.log(rest.set(2, 'Lisbon, Portugal'));
rest
.set('categories', ['Italian', 'Pizzeria', 'Vegetarian', 'Organic'])
.set('open', 11)
.set('close', 23)
.set(true, 'We are open :D')
.set(false, 'We are closed :(');//set可连续调用
常用方法
- rest.set(a, b);//可传入数组、对象(特别是dom对象)、布尔值、数字等作为key,例:
const arr = [1, 2];
rest.set(arr, 'Test');
rest.set(document.querySelector('h1'), 'Heading');
console.log(rest.get(arr));
- rest.delet();
- rest.get(); // 传入key得value
- rest.has(); //是否存在
- rest.size;
- rst.clear();
- 对象转Map:利用object.entries方法:
const hoursMap = new Map( Object.entries(openingHours) );
- for-of循环遍历Map:
for (const [key, value] of question) {}
几种数据结构的对比
原型数据结构与(高级数据结构?忘记原表述了 ):
原生数据结构(string,int,char)在定义时直接在内存开辟空间,因此在函数传参时,会有形参实参的区别,但是高级解构如数组和对象,在定义时首先开辟一块区域存放数据,而在栈中定义一个空间存开辟的区域的地址。因此定义const arr = [1,2,3];
数组内容可以改变:arr[0] = 50
,但不可以进行:arr = [626,45,222]
这种更改指针指向的操作。
在复制操作中也同理:高级的数据结构在复制的时候只是多了一个新指针指向数据地址,但是并没有复制其中的value,在编写代码时要注意这种行为。(用其他语言的行为理解js,js无“引用传递”或指针等概念)
课程打点:几种数据结构的对比
字符串
- JavaScript在用户调用字符串方法时,自动将字符串转换为字符串对象:装箱(boxing)
- 返回结果依然为String:拆箱(Unboxing)
const airline = 'TAP Air Portugal';
- 可像数组一样访问指定位置:
airline[0];
- airline.length; //返回长度
- airline.indexOf(); //返回传入字符出现的第一个位置(可传字符串)
- airline.lastIndexOf(); //传入字符所处的最后一个位置
- airline.slice(a,b); // 从a(包括a)开始向后裁切,取后半部分,到b(不含b),裁出长度:b-a,可传入负数
- airline.split(); //返回一个数组,将从传入字符切割
- airline.join(); // 将数组连起来
- airline.toLowerCase(); //全部换为小写字符
- airline.toUpperCase(); //大写
- airline.trim(); //函数移除字符串两侧的空白字符或其他预定义字符。
- airline.replace(a,b); // return a with b ,只替换第一个出现的,若想全替换:
replaceAll();
,或使用正则表达式:js中的正则:两斜杠/replace/
- airline.padStart(a, b); //a:扩充到多长,b:用什么字符扩充
- airline.repeat());
- airline.includes(); // 返回boolean
- airline.startsWith(); // 返回boolean
- airline.endsWith(); // 返回boolean
例:大小写转换
const output = `${first}${second.replace(
second[0],
second[0].toUpperCase()
)}`;//使用replace进行直接替换