js数组拓展

作者: fanison | 来源:发表于2019-03-10 16:03 被阅读49次
    • Array.isArray(obj)

    这是Array对象的一个静态函数,用来判断一个对象是不是数组

    var a = [1,2,3];
    var b = new Date();
    console.log(Array.isArray(a)); //true
    console.log(Array.isArray(b)); //false
    
    • indexOf

    indexOf方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1。
    indexOf方法还可以接受第二个参数,表示搜索的开始位置。

    var a = ['a', 'b', 'c'];
    console.log(a.indexOf('b')) // 1
    console.log(a.indexOf('y')) // -1
    ['a', 'b', 'c'].indexOf('a', 1) // -1    从1号位置开始搜索字符a,结果为-1,表示没有搜索到。
    
    • lastIndexOf

    lastIndexOf方法返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1。

    var a = [1,2,3,3,2,1]
    console.log(a.indexOf(2)) //1
    console.log(a.lastIndexOf(2)) //4
    

    注意,这两个方法不能用来搜索NaN的位置,即它们无法确定数组成员是否包含NaN。

    • map

    map方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。

    var a = [1, 2, 3, 4, 5, 6]
    console.log(a.map(function(e){
      return e * e
    }))  // [1, 4, 9, 16, 25, 36]
    console.log(a) //[1, 2, 3, 4, 5, 6]
    

    上面代码中,a数组的所有成员依次执行参数函数,运行结果组成一个新数组返回,原数组没有变化。

    map方法接受一个函数作为参数。该函数调用时,map方法向它传入三个参数:当前成员、当前位置和数组本身。

    [1, 2, 3].map(function(elem, index, arr) {
      return elem * index;
    });
    // [0, 2, 6]
    

    上面代码中,map方法的回调函数有三个参数,elem为当前成员的值,index为当前成员的位置,arr为原数组([1, 2, 3])。

    • forEach

    forEach也是对数组的所有成员依次执行参数函数。遍历数组,参数为一个回调函数,回调函数有三个参数:
    1.当前元素
    2.当前元素索引值
    3.整个数组

    var a = [1,2,3,4,5,6];
    console.log(a.map(function(e){return e+1}));//[2, 3, 4, 5, 6, 7]
    console.log(a); //[1, 2, 3, 4, 5, 6];
    a.forEach(function(e,i,array){
        array[i]= e + 1;
    });
    console.log(a); //[2, 3, 4, 5, 6, 7]
    

    forEach方法不返回值,只用来操作数据。这就是说,如果数组遍历的目的是为了得到返回值,那么使用map方法,否则使用forEach方法

    • every()、some()

    返回布尔值,表示判断数组成员是否符合某种条件。
    它们接受一个函数作为参数,所有数组成员依次执行该函数。该函数接受三个参数:当前成员、当前位置和整个数组,然后返回一个布尔值。

    some方法是只要一个成员的返回值是true,则整个some方法的返回值就是true,否则返回false。

    every方法是所有成员的返回值都是true,整个every方法才返回true,否则返回false。

    var a = [1, 2, 3, 4, 5, 6]
    console.log(a.every(function(e, i, arr){
    return e < 5
    }))        //false
    console.log(a.some(function(e,i,arr){
      return e > 4
    }))        //true
    
    • filter

    filter方法用于过滤数组成员,满足条件的成员组成一个新数组返回。
    它的参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。

    var a = [1, 2, 3, 4, 5, 6]
    console.log(a.filter(function(e){
      return e % 2 == 0;
    }))             // [2, 4, 6]
    console.log(a) //[1, 2, 3, 4, 5, 6]
    
    • reduce、reduceRight

    reduce方法和reduceRight方法依次处理数组的每个成员,最终累计为一个值。
    reduce是从左到右处理(从第一个成员到最后一个成员),reduceRight则是从右到左(从最后一个成员到第一个成员)。
    有两个参数:
    1.回调函数:把两个值合为一个,返回结果
    2.value,一个初始值,可选

    [1, 2, 3, 4, 5].reduce(function (a, b) {
      console.log(a, b);
      return a + b;
    })
    // 1 2
    // 3 3
    // 6 4
    // 10 5
    //最后结果:15
    

    上面代码中,reduce方法求出数组所有成员的和。第一次执行,a是数组的第一个成员1,b是数组的第二个成员2。第二次执行,a为上一轮的返回值3,b为第三个成员3。第三次执行,a为上一轮的返回值6,b为第四个成员4。第四次执行,a为上一轮返回值10,b为第五个成员5。至此所有成员遍历完成,整个方法的返回值就是最后一轮的返回值15。

    var a = [1, 2, 3, 4, 5, 6]
    var b = a.reduce(function(v1, v2){ return v1 + v2 }, 100)
    console.log(b) // 121
    

    上面代码指定参数a的初值为100,所以数组从100开始累加,最终结果为121。注意,这时b是从数组的第一个成员开始遍历。

    图片源于知乎@水乙

    参考链接


    以上大量参考 Array 对象

    相关文章

      网友评论

        本文标题:js数组拓展

        本文链接:https://www.haomeiwen.com/subject/trgupqtx.html