博客列表 >访问器属性、字符串和数组方法、实战之循环队列

访问器属性、字符串和数组方法、实战之循环队列

Jet的博客
Jet的博客原创
2023年02月21日 11:13:06504浏览

一、访问器属性

1.1、传统访问器属性

  1. let staff = {
  2. data: {
  3. age: 28,
  4. }
  5. }
  6. console.log(staff.data.age)
  7. // update属性
  8. staff.data.age = 30
  9. console.log(staff.data.age);


1.2、创建方法接口访问

传统访问器属性,层级过深,可以创建访问接口

  1. staff = {
  2. data: {
  3. age: 40,
  4. },
  5. // 读写age属性访问接口
  6. // getter 读取:
  7. getAge: function() {
  8. return this.data.age
  9. },
  10. // setter 设置
  11. setAge: function(age) {
  12. // 错误优先策略
  13. if (age<18 || age>60) {
  14. console.error('年龄必须在18-60岁之间')
  15. return false
  16. }
  17. this.data.age = age
  18. }
  19. }
  20. console.log(staff.getAge())
  21. // 方法获取 -> 属性获取
  22. staff.setAge(30)
  23. console.log(staff.getAge())


1.3、创建属性接口访问

  1. // 访问器属性
  2. staff = {
  3. data: {
  4. age: 40
  5. },
  6. // getter 读取:
  7. get age() {
  8. return staff.data.age
  9. },
  10. // setter 设置
  11. set age(age) {
  12. if (age<18 || age>60) {
  13. console.log('年龄必须在18-60岁之间')
  14. return false
  15. }
  16. this.data.age = age
  17. },
  18. }
  19. console.log(staff.age)
  20. staff.age = 78
  21. console.log(staff.age)


1.4、访问器属性与原有同名属性优先级

  1. const obj = {
  2. // 普通属性
  3. uname: '张三',
  4. // 访问属性:
  5. get uname() {
  6. return '李四'
  7. },
  8. }
  9. // 访问器属性 > 原有同名属性
  10. console.log(obj.uname)


小总结:

  1. /**
  2. * 一、访问器属性:
  3. * 1. getter: getAge() => get age()
  4. * 2. setter: setAge(age) => set age(age)
  5. *
  6. * 披着“属性”外衣的“方法
  7. * 按”属性“来访问,按”方法“来声明
  8. */
  9. /**
  10. * 二、优先级
  11. * 访问器属性 > 原有同名属性
  12. */

二、字符串常用方法

  1. // ! 字符串常用方法:
  2. /*
  3. 1. `str.length`
  4. 2. `str.search()`
  5. 3. `str.replace()`
  6. 4. `str.slice()`
  7. 5. `str.substr()`
  8. 6. `str.split()`
  9. 7. `str.toLowerCase()`
  10. 8. `str.toUpperCase()`
  11. */
  12. let str = 'hello world';

2.1、str.length

  1. // 1. str.length
  2. // 获取字符串长度
  3. console.log(`length:`+ str.length);


  1. // 查找某个字符的索引号,若无则返回-1
  2. console.log(str.search('orld'));
  3. console.log(str.search('aaa'));


2.3、str.replace

  1. // 替换字符
  2. console.log(str.replace('world', 'php'));
  3. console.log(str);


2.4、slice

  1. // 查找字符串并显示:起始索引,结束索引
  2. console.log(str.slice(0, 3));


2.5、substr

  1. // 获取字符串,起始索引,获取多少个
  2. console.log(str.substr(2,3));


2.6、split

  1. // 字符串 -> 数组
  2. console.log(str.split(''));


2.7、tolowerCase/toUpperCase

  1. // 转为小写:
  2. console.log('Hworld'.toLowerCase());
  3. // 转为大写
  4. console.log('Hworld'.toUpperCase());


三、数组的常用方法

  1. /**
  2. 1. `arr.push()/arr.pop()`
  3. 2. `arr.unshift()/arr.shift()`
  4. 3. `arr.keys()/arr.values()/arr.entries()`
  5. 4. `arr.slice()`
  6. 5. `arr.splice()`
  7. 6. `arr.sort()`
  8. 7. `arr.forEach()/arr.map()`
  9. 8. `arr.some()/arr.every()`
  10. 9. `arr.filter()/find()/findLast()/findIndex()`
  11. 10. `arr.reduce()`
  12. */
  13. let arr = [1, 2, 3, 4, 5];

3.1、push() / pop():尾部添加删除

  1. // 尾部添加
  2. console.log(arr.push('a')); //当前数组中的元素数量
  3. console.log(arr);
  4. // 尾部删除
  5. console.log(arr.pop()); // 被删除的元素
  6. console.log(arr.pop()); // 被删除的元素
  7. console.log(arr.pop()); // 被删除的元素
  8. console.log(arr);


3.2、unshift() / shift():头部添加删除

  1. // 头部添加
  2. console.log(arr.unshift('a')); // 当前数组中的元素数量
  3. console.log(arr);
  4. console.log(arr.unshift('b','C')); // 当前数组中的元素数量
  5. console.log(arr);
  6. // 头部删除
  7. console.log(arr.shift()); // 删除b
  8. console.log(arr.shift()); // 删除C
  9. console.log(arr);


3.3、keys() / values() / entries():键值对

  1. let arr1 = ['red', 'green', 'blue'];
  2. console.log(arr1);
  3. // keys()
  4. console.log(arr1.keys());
  5. // 返回一个迭代对象,使用 for-of 遍历
  6. for (let item of arr1.keys()) {
  7. console.log(item);
  8. }
  9. // values()
  10. console.log(arr1.values());
  11. for (let item of arr1.values()) {
  12. console.log(item);
  13. }
  14. // entries():键值对
  15. console.log(arr1.entries());
  16. for (let item of arr1.entries()) {
  17. console.log(item);
  18. }


3.4、slice()

  1. arr = [2, 4, 5, 6, 9];
  2. // 第一个参数是从字符串开始位置起,第二个参数是字符串位置结束(不含该位置)
  3. console.log(arr.slice(1, 3));


3.5、splice():数组增删改

  1. // 第一个参数是从字符串开始位置起,第二个参数是字符串位置结束
  2. // 5.1 删除
  3. console.log('------------删除-------------')
  4. console.log(arr);
  5. console.log(arr.splice(1,3));
  6. console.log(arr);
  7. console.log('------------添加-------------')
  8. // 第2个参数为0,表示不删除
  9. // 在第一个参数后面添加
  10. console.log(arr.splice(1,0,'a','b','c'));
  11. console.log(arr);
  12. console.log('------------更新-------------')
  13. // 第一个参数是起始位置,第二个参数是删除多少个
  14. // 先删除 后添加
  15. console.log(arr.splice(1,2,'red','green','blue'));
  16. console.log(arr);


3.6、sort():排序

  1. arr = [10,2,5,3]
  2. // 将数组默认为”字符串“进行排序
  3. console.log(arr.sort());
  4. // 传入一个自定义排序规则
  5. console.log(
  6. arr.sort(function(a,b){
  7. return a-b;
  8. })
  9. )
  10. // 简化:
  11. console.log(arr.sort((a,b)=>a-b));
  12. // 反向:
  13. console.log(arr.sort((a,b)=>b-a));


数组回调方法:

  1. /**
  2. * 1. 遍历: forEach / map
  3. * 2. 断言: every / some
  4. * 3. 过滤: filter / find /findLast
  5. * 4. 累加: reduce
  6. */
  7. let arr2 = [1, 2, 3, 4, 5];

3.7、forEach() / map()

  1. rr2.forEach((item, index,arr2) => console.log(item, index,arr2));
  2. arr2.forEach(item => console.log(item * 2))
  3. // forEach无返回值,map有返回值
  4. let res = arr2.map(item => item * 2)
  5. console.log(res);


3.8、every() / some()

  1. // every:所有成员必须全部满足条件才返回true
  2. // some:与every相反,只要一个满足就返回true
  3. // 返回布尔值
  4. console.log(arr2)
  5. console.log(arr2.every(item => item > 0))
  6. console.log(arr2.every(item => item > 3))
  7. console.log(arr2.some(item => item > 3))
  8. console.log(arr2.some(item => item > 8))


3.9、filter() / find() / findLast()

  1. let arr3 = [1, 2, 3, 4, 5];
  2. // 返回满足条件的元素,组成新数组
  3. res1 = arr3.filter(item => item > 3)
  4. console.log(res1);
  5. // 获取第一个
  6. res1 = arr3.filter(item => item > 3)[0]
  7. console.log(res1);
  8. // find() = arr3.findIndex(item => item > 3)[0]
  9. res1 = arr3.find(item => item > 3)
  10. console.log(res1);
  11. // 获取第一个
  12. res1 = arr3.findIndex(item => item > 3)
  13. console.log(res1);
  14. // 获取最后一个
  15. res1 = arr3.findLast(item => item > 3)
  16. console.log(res1);


3.10、reduce():累加器

  1. // reduce(callback, init)
  2. res2 = arr.reduce(function (prev, cur) {
  3. return prev + cur;
  4. // prev = 1, curr = 2 , prev = 1 + 2
  5. // prev = 3, ...
  6. },20)
  7. console.log(res);


四、实战之循环队列

  1. let arr = [1,2,3,4,5,6,7,8,9];
  2. let arr1 = [];
  3. for (let i = arr1.length; i < arr.length; i ++){
  4. // 创建一个新数组保存
  5. let obj = [];
  6. // 如果 i 长度少于 arr.length
  7. if( i < arr.length ){
  8. obj = arr[i]
  9. // arr1在尾部添加新数据obj
  10. arr1.push(obj)
  11. }
  12. // i 从0开始自增,一直少于,直到等于就开始从头部剔除
  13. else{
  14. obj = arr[i]
  15. arr1.shift(obj)
  16. }
  17. }
  18. console.log(arr1)

  1. 思路:
  2. 1、首先创建2个数组,一个是源数据数组 arr ,一个是空数组 arr1
  3. 2、嵌套次循环判断:
  4. 2.1 若空数组 arr1 长度少于源数组 arr 长度,自增 arr1 长度
  5. 2.2 循环里创建一个空数组 obj
  6. 2.3 arr1 长度少于 arr,就保存此数据在 obj ,然后在 arr1 尾部push obj数据
  7. 2.4 arr1 长度等于 arr ,就保存此数据在 obj ,然后在arr1头部shift obj数据
  8. 3、进入下一次循环

大概思路是这样,不知道对不对,希望老师指导一下哈。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议