整理ECMAScript数组

作者: 墨子柚 | 来源:发表于2018-05-11 18:34 被阅读12次

    • 创建数组
    • 数组内置方法
    • 衍生问题:
      1.如何检测某个对象是不是数组?

    创建数组的基本方式

    • 1.使用Array构造函数
      var colors = new Array();
      var colors = new Array(20);//知道数组的长度
      var colors = new Array("red","blue","green");//直接传递数组的项
      注意:
      给构造函数传递一个值也可以创建数组,但是这个时候就要看传递值的类型。
    - 若传递的是数值
    var clolors = new Array(3); //[empty × 3] 则创建了一个包含三项的数组
    - 若传递的是其他类型的参数,比如字符串
    var colors = new Array('3');//["3"]
    - 在使用Array构造函数时,也可以省略new操作符
    
    • 2.使用数组字面量表示法。(不要被数组字面量这个概念吓着,其实就是由一对包含数组项的方括号表示,多个数组项之间逗号隔开)
    - var colors = ["red","blue","green"]; //["red","blue","green"]
    - var colors = [];//创建一个空数组
    - 但是要注意,
        var v = [1,2,]; //会创建一个包含2 或者 3项(IE)的数组
    - 数组最多可以包含4294967295 = 2的32次方-1个项。
    

    数组内置方法

    转换方法

    所有的对象都具有下面三个方法。

    • toString()
    • valueOf()
    • toLocaleString()
    - 在控制台运行如下代码:
    var c = ['red', 'blue', 'green'];
    c.toString();//"red,blue,green"
    c.valueOf();//["red", "blue", "green"]
    c.toLocaleString();//"red,blue,green"
    可以看到:
    toLocaleString() 和toString()会返回由数组中每一项以英文逗号拼接的字符串;
    valueOf() 返回的还是数组;
    

    分隔方法

    • join()
      通过这个方法,可以使用不同的分隔符来拼接数组。
    - 在控制台执行
    c.join('||') //"red||blue||green"
    若是不传分隔符,默认就是英文逗号拼接
    c.join()  //"red,blue,green"   
    

    栈方法

    • push()
    • pop()
      ECMAScript专门提供这两种方法,实现类似栈的行为(后进先出,且始终只作用于栈的顶部)
    - push():可以接收任意数量的参数,把它们逐个添加到数组的尾部,并返回修改后数组的长度。
    - pop():从数组末尾移出最后一项,减少数组的length值,然后返回移出的项。
    

    队列方法

    • shift()
    • unshift()
      队列与栈有所不同。队列是先进先出,且在列表的末端添加项,从列表的前端移出项。结合使用push()和shift()方法,即可模拟队列;结合使用pop()和unshift()方法,即可反向模拟队列;即在数组的前端添加项,从数组的末端移出项。
    - shift() 在控制台执行下面代码:
        var colors = new Array();
        var count = colors.push("red", "green");
        输出colors和count:
        colors // ["red", "green"]
        count // 2
        count = colors.push("black");
        colors // ["red", "green","black"]
        count // 3
        var item = colors.shift();
        item//"red"
        colors// ["green", "black"]
        可以看出,shift()是移出数组中的第一项并返回该项,同时将数组长度减1.
    - unshift()
      与shift()方法相反,该方法可以在数组前端添加任意个项并返回新数组长度。在控制台输入如下代码:
         var colors = new Array(); 
         var count = colors.unshift("red", "green");   //2
         colors   //"red", "green"]
         count = colors.unshift("black"); //3
         colors   //["black", "red", "green"]
    

    重排序方法

    • reverse() 反转数组
    • sort() 按升序排列数组项
    - reverse() 在控制台执行下面代码:
      [1,2,3,4,5].reverse() // [5, 4, 3, 2, 1]
    - sort()
      [3,5,1,9,7].sort() // [1, 3, 5, 7, 9]
      但是要注意:sort()方法比较的是字符串,即便数组中每一项都是数值,sort()方法比较的也是字符串,如下所示:
      [10, 5, 2, 3].sort() //[10, 2, 3, 5]
      这是因为,为了实现排序,sort()方法会调用每个数组项的toString()方法。
    

    操作方法

    • concat() 连接数组
      先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返 回新构建的数组。
      1)若没有给concat()方法传参数,则只是复制当前数组并返回副本。
      2)如果传递给concat()方法的是一个或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中。
      3)如果传递的值不是数组,这些值就被会简单的添加到结果数组的末尾。
    - concat() 在控制台执行下面代码:
       var colors = [1, 2,3];
       var colors2=colors.concat("yellow", ["a", "b"]);
       colors2 // [1, 2, 3, "yellow", "a", "b"]
    
    • slice()
      基于当前数组中的一个或多个项创建一个新数组。我的理解就是用于切割数组的,但是不影响原数组。要注意的就是参数。根据参数来分:
      1)一个参数,且参数为正
      2)一个参数,且参数为负
      3)两个参数,且参数都为正
      4)两个参数,且参数都为负
      5)两个参数,一正一负,不分先后
    - 根据上面五种情况举例。
      var colors = [1, 2, 3];
      colors.slice(1) // [2, 3](返回从该参数指定位置开始到当前数组末尾的所有项)
      colors.slice(-1) // [3] (参数加上数组长度,然后和为正的处理相同)
      colors.slice(1, 3) // [2, 3](返回起始位置和结束位置之间的项,不包括结束位置)
      colors.slice(-2,-1) // [2](参数加上数组长度,然后和为正的处理相同)
      colors.slice(-2,1) // [] 无意义
      colors.slice(2,-1) // [] 无意义
    
    • splice() 删除、插入、替换均可(根据参数的不同,作用不同)
      删除:两个参数,第一个参数是要删除的第一项的位置;第二个参数是要删除的项数。
      插入:至少三个参数,第一个参数是插入的起始位置;第二个参数是0(要删除的项);第三个参数是要插入的项。如果要插入多个项,可以再传入第四个、第五个等等项。
      替换:至少三个参数,第一个参数是要替换的起始位置;第二个参数是要删除的项数(大于0);第三个参数要替换的项。同替换,如果要替换多个项,可以再传入第四个、第五个等等项。(注意:插入的项数不需要与删除的项数相等)
    -  控制台示例如下:
      var colors = [1, 2, 3];
      //删除
      colors.splice(0,1) // [1]
      colors // [2, 3]
     //替换
      colors.splice(0,1, 'yellow', 'red')  // [2]
      colors // ["yellow", "red", 3]
      //插入
      colors.splice(0, 0, 'aa', 'bb') // []
      colors //  ["aa", "bb", "yellow", "red", 3]
    

    位置方法

    • indexOf() 从数组的开头向后查找
    • lastIndexOf() 从数组的末尾开始向前查找

    迭代方法

    • every()
    • filter()
    • forEach()
    • map()
    • some()

    缩小方法

    • reduce()
    • reduceRight()

    相关文章

      网友评论

        本文标题:整理ECMAScript数组

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