前端基础22:数组迭代基本方法

157 阅读4分钟

回调函数

  • 把一个函数的定义(A)作为参数传给另一个函数(B),函数A称为B的回调函数,B函数运行完后才会运行A函数

数组迭代方法

  • forEach()数组遍历,无返回值
    • 参数: - 1.是一个回调函数 - 2.是一个context(改变回调函数中的this关键字)
    var a = [1,2,3,4,5];
    a.forEach(function (item,index,a) { //声明式
        console.log(item, index, a);//值,索引,原数组
    });
  • map()遍历数组,有返回值,可以对原数组进行操作
    • 参数: - 1.是一个回调函数 - 2.是一个context(改变回调函数中的this关键字)
    var a = [1,2,3,4,5];
    var res = a.map(function (item,index,a) {
        return item*2; //将回调函数的返回值放入一个新数组中,最后将新数组作为map方法的返回值
    })
    console.log(a);//[1, 2, 3, 4, 5]
    console.log(res);//[2, 4, 6, 8, 10]
  • 重写map方法:
    //回调函数考虑的几个方面
    //1.回调函数是否有参数
    //2.回调函数执行次数
    //3.回调函数是否有返回值
    var ary = [1,2,3,4,5];
    Array.prototype.myMap = function (callback,context) {
        //先处理第二个参数判断是否传了
        context = context || window;
        //this指的是数组 callback执行的次数是数组的长度
        var newAry = [];//用来存回调函数的返回值
        for(var i = 0; i < this.length; i++){
            var res = callback.call(context,this[i],i,this);
            newAry.push(res);
        }
        return newAry;
    }
    var res = ary.myMap(function (item,index,ary) {
        return item*2;
    })
    console.log(res);
  • some有一个为真返回true,所有为假返回false (参数同上)
    var ary = [1,2,3,4,5];
    var res = ary.some(function (item,index,ary) {
        return item>3;
    })
    console.log(res);//true
  • every有一个为假返回false,所有为真返回true (参数和上面相同)
    var ary = [1,2,3,4,5];
    var res = ary.every(function (item,index,ary) {
        return item>3;
    })
    console.log(res);//false
  • filter过滤 把满足条件的留下,不满足的过滤掉 (参数同上)
    var ary = [1,2,3,4,5];
    var res = ary.filter(function (item,index,ary) {
        return item>2;
    })
    console.log(res);//[3,4,5]
  • es6:find 返回满足条件的这一项,一旦找到不会继续查找,找不到返回undefined (参数同上)
    var ary = [1,2,3,4,5];
    var res = ary.find(function (item,index,ary) {
        return item>2;
    })
    console.log(res);//3
  • es6:findindex 返回满足条件的索引,找不到返回-1 (参数同上)
    var ary = [1,2,3,4,5];
    var res = ary.findIndex(function (item,index,ary) {
        return item>2;
    })
    console.log(res);//2
  • reducereduceRight对每一项累计的结果 如求累加之和 两方法数组取值顺序不同 ***reduceRight***和reduce取值方向相反
    • 参数: - 1.第一个参数是一个回调函数 - 2.第二个参数是用来设置累计项的初始值,不设置为数组的第一个值
    var ary = [1,2,3,4,5];
    var res = ary.reduce(function (prev,cur) {
        //prev 累计项 不设置为数组的第一项 cur数组的每一项
        return prev + cur;
    })
    console.log(res);//15

正则

  • 正则用来处理字符串的
  • 正则的概念:相当于一个模型(验证的规则)匹配符合的字符串
  • 正则的作用:匹配(test)和捕获(reg.exec(),str.match(),str.split())
  • 正则的组成部分:元字符和修饰符

特殊含义的元字符:

符号 意义
\d 匹配一个数字字符
\D 匹配非数字
\w 匹配A-Z,a-z,0-9,下划线
\W 匹配非单词字符
\s 匹配任意空字符
\b 匹配边界字符
x|y 匹配x或y
[zyx] 表示xyz任意一个
[^zyx] 匹配不是zxy任何一个
[a-z] 匹配a-z的任意一个
[^a-z] 匹配非a-z
() 代表分组
^ 代表以什么开头
$ 代表以什么结束
. 代表任何字符(除了\n)
\ 表示转意
\n 换行符
?: 只匹配不捕获
  • []用法
    • []中的-表示ascii码中连续的字符
    • 特殊的字符在[]中表示字符本身的意思,特殊字符不包括\d,\w等
    • []中没有两位数

量词元字符

符号 意义
* 表示0到多次
+ 表示1到多次
表示0或者1次
{n} 表示出现n次
{n,} 表示出现n到多次
{n,m} 表示出现n到m次

修饰符

符号 意义
g(globa) 全局匹配
i(ignoreCase) 忽略大小写
m(multiple) 多行匹配
  • 用16进制表示没法操作的字符,不足四位的在前面补零
    var reg = /[\u4e00-\u9fa5]{2,5}/; //匹配中文字符
    var str = '沙发';
    console.log(reg.test(str));//true

正则定义方式

  • 字面量方式://
  • 构造函数的方式:new RegExp()
  • 区别:
    • 1.构造函数的方式可以表示变量,字面量不行
    • 2.构造函数中\表示一个\