JavaScript数组的方法

JavaScript中数组的方法种类众多,有ES5之前版本中存在的,ES5新增,ES6新增等;并且数组的方法还有原型方法和从object继承的方法,这里我们只介绍数组在每个版本中原型上的方法。

一:如何创建一个数组

  1:字面量方式创建数组

  var arr1 = [];                    //创建一个空数组
  var arr2 = [5];                   //创建一个具有单个元素的数组
  var arr3 = [5,6,7];               //创建一个具有多个元素的数组

  2:构造函数方式创建数组

  var arr1 = new Array();          //创建一个空数组
  var arr2 = new Array(5);         //创建一个长度为5,值为空的数组
  var arr3 = new Array(5,6,7);     //创建一个具有多个元素的数组

二:数组方法

1:concat():合并数组,并返回合并之后的数据,不改变原来的数组。

  a:功能:用于连接两个或多个数组,该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

  b:参数:concat(data1,data2,...);所有参数可选,要合并的数据;data为数组时,将data合并到原数组;data为具体数据时直接添加到原数组尾部;省略时创建原数组的副本。

  c:代码:

   var arr1 = [1,2,3]
      var arr2 = arr1.concat();  
      console.log(arr1);           //[1,2,3]---原数组
      console.log(arr1 === arr2);  //false
      console.log(arr2);           //[1,2,3]---原数组的副本
    
      console.log(arr1.concat("hello","world"));           //[1,2,3,"hello","world"]
      console.log(arr1.concat(["a","b"],[[3,4],{"name":"admin"}]));   //[1,2,3,"a","b",[3,4],{"name":"admin"}]
      console.log(arr1);           //[1,2,3]---原数组未改变

2:join():使用分隔符,将数组转为字符串并返回,不改变原来的数组。

  a:功能:根据指定分隔符将数组中的所有元素放入一个字符串,并返回这个字符。

  b:参数:join(str);参数可选,默认为","号,以传入的字符作为分隔符。

  c:代码:

    var arr = [1,2,3];
    console.log(arr.join());         //1,2,3
    console.log(arr.join("-"));      //1-2-3
    console.log(arr);                //[1,2,3]---原数组未改变

3:pop():删除最后一位,并返回删除的数据,会改变原来的数组。

  a:功能:方法用于删除并返回数组的最后一个元素。

  b:参数:没有参数。

  c:代码:

    var arr = [1,2,3];
    console.log(arr.pop());     //3
    console.log(arr);           //[1,2]---原数组改变

4:shift():删除第一位,并返回删除的数据,会改变原来的数组。

  a:功能:方法用于删除并返回数组的第一个元素。

  b:参数:没有参数。

  c:代码:

    var arr = [1,2,3]
    console.log(arr.shift());       //1
    console.log(arr);               //[2,3]---原数组改变

5:unshift():在第一位新增一个或多个数据,返回长度新数组的长度,会改变原来的数组。

  a:向数组的开头添加一个或多个元素,并返回新的长度。

  b:unshift(newData1, newData2, ......),括号里面是新增的数据。

  c:代码:

    var arr = [1,2,3];
    console.log(arr.unshift("hello"));  //4
    console.log(arr);                   //["hello",1,2,3]---原数组改变
    console.log(arr.unshift("a","b"));  //6
    console.log(arr);                   //["a","b","hello",1,2,3]---原数组改变

6:push():在最后一位新增一个或多个数据,并返回新数组的长度,会改变原来的数组。

  a:向数组的末尾添加一个或多个元素,并返回新的长度。

  b:参数:push(newData1, newData2, ......),括号里面是新增的数据。

  c:代码:

    var arr = [1,2,3];
    console.log(arr.push("hello"));  //4
    console.log(arr);                //[1,2,3,"hello"]---原数组改变
    console.log(arr.push("a","b"));  //6
    console.log(arr);                //[1,2,3,"hello","a","b"]---原数组改变

7:reverse():反转数组,并返回结果,会改变原来的数组。

  a:颠倒数组中的元素顺序。

  b:参数:没有参数。

  c:代码:

    var arr = [1,2,3];
    console.log(arr.reverse());     //[3,2,1]
    console.log(arr);               //[3,2,1]---原数组改变

8:slice():截取指定位置的数组,并返回,不会改变原来的数组。

  a:功能:可从已有的数组中返回选定的元素。该方法接收两个参数slice(start,end),strat为必选,表示从第几位开始;end为可选,表示到第几位结束(不包含end位),省略表示到最后一位;start和end都可以为负数,负数时表示从最后一位开始算起,如-1表示最后一位。

  b:参数:slice(startIndex, endIndex)。startindex:这是第一个参数,为必选,表示从第几位开始截取,endindex:这是第二个参数,为可选,表示到第几位结束(不包含end)。

  c:代码:

    var arr = ["Tom","Jack","Lucy","Lily","May"];
    console.log(arr.slice(1,3));        //["Jack","Lucy"]
    console.log(arr.slice(1));          //["Jack","Lucy","Lily","May"]
    console.log(arr.slice(-4,-1));      //["Jack","Lucy","Lily"]
    console.log(arr.slice(-2));         //["Lily","May"]
    console.log(arr.slice(1,-2));       //["Jack","Lucy"]
    console.log(arr);                   //["Tom","Jack","Lucy","Lily","May"]---原数组未改变

9:sort():排序(是按照字符规则排序,逐位比较的规则),返回结果,会改变原来的数组。

  a:功能:对数组中的元素进行排序,默认是升序。

  b:默认排序的代码:

    var arr = [6,1,5,2,3];
    console.log(arr.sort());    //[1, 2, 3, 5, 6]
    console.log(arr);           //[1, 2, 3, 5, 6]---原数组改变

  c:但是在排序前,会先调用数组的toString方法,将每个元素都转成字符之后,再进行排序,此时会按照字符串的排序,逐位比较,进行排序。排序规则是按照字符规则排序的,逐位比较的规则。

    代码: 

      var arr = [6,1024,52,256,369];
      console.log(arr.sort());    //[1024, 256, 369, 52, 6]
      console.log(arr);           //[1024, 256, 369, 52, 6]---原数组改变

  d:参数:sort(callback)

    如果需要按照数值排序,需要传参。sort(callback),callback为回调函数,该函数应该具有两个参数,比较这两个参数,然后返回一个用于说明这两个值的相对顺序的数字(a-b)。其返回值如下:

      若 a 小于 b,返回一个小于 0 的值。
      若 a 等于 b,则返回 0。
      若 a 大于 b,则返回一个大于 0 的值。

      代码:

          var arr = [6,1024,52,256,369];
          console.log(arr.sort(fn));  //[6, 52, 256, 369, 1024]
          console.log(arr);           //[6, 52, 256, 369, 1024]---原数组改变
          function fn(a,b){
              return a-b;
          }

10:splice():删除指定位置,并替换,返回删除的数据,会改变原来的数组。

  a:向数组中添加,或从数组删除,或替换数组中的元素,然后返回被删除/替换的元素。

  b:参数:splice(start,num,data1,data2,...); 所有参数全部为可选。

    ①:不传参数时:无操作

        var arr = ["Tom","Jack","Lucy","Lily","May"];
        console.log(arr.splice());      //[]
        console.log(arr);               //["Tom","Jack","Lucy","Lily","May"]---无操作

    ②:只传入start:表示从索引为start的数据开始删除,直到数组结束

        var arr = ["Tom","Jack","Lucy","Lily","May"];    
        console.log(arr.splice(2));     //["Lucy", "Lily", "May"],这是返回的被删除/替换的元素。
        console.log(arr);               //["Tom", "Jack"]---原数组改变

    ③:传入start和num:表示从索引为start的数据开始删除,删除num个

        var arr = ["Tom","Jack","Lucy","Lily","May"];    
        console.log(arr.splice(2,2));   //["Lucy", "Lily"]
        console.log(arr);               //["Tom", "Jack", "May"]---原数组改变

    ④:传入更多:表示从索引为start的数据开始删除,删除num个,并将第三个参数及后面所有参数,插入到start的位置

        var arr = ["Tom","Jack","Lucy","Lily","May"];    
        console.log(arr.splice(2,2,"a","b"));  //["Lucy", "Lily"]
        console.log(arr);                      //["Tom", "Jack", "a", "b", "May"]---原数组改变
    ⑤:传入更多:表示从索引为start的数据开始删除,删除0个,并将第三个参数及后面所有参数,插入到start的位置,num可以为0

11:toString():直接转为字符串,并返回,不改变原来的数组。
  a:功能:转换成字符串,类似于没有参数的join()。该方法会在数据发生隐式类型转换时被自动调用,如果手动调用,就是直接转为字符串。
  b:参数:没有参数。
  c:代码:
12:indexOf():返回要查找的项在数组中的索引位置,没找到的情况下返回-1,找到的话则返回该数据在数组的索引。
  a:功能:返回指定数据所在的索引,没有找到,则返回-1,找到的话则返回该数据在数组的索引。
  b:参数:第一个参数是要查找的数据,第二参数是需要查找数据的起始位置
  c:返回值:索引值或者-1
  d:代码:
1     var res = arr.indexOf(5);
2     var res = arr.indexOf(5,3);
3     var res = arr.indexOf("a");
4     console.log(res);

13:

 
   
posted @ 2020-04-29 20:42  D_Ming  阅读(217)  评论(0)    收藏  举报