JavaScript--數組

1. Array類型
 ECMAScript數組和其餘語言中的數組都是有序列表,可是有如下特性:
    a.每一項均可以保存任何類型的數據。
    b.數組的大小是能夠動態調整。
    c.數組的length屬性:可讀可寫,能夠經過設置length的值從數組的末尾移除項或向數組中添加新項前端

    1) 建立方法
       1. 使用Array構造函數
          var arr = new Array();
          var arr = new Array(20);  // 預先指定數組的大小
          var arr = new Array("terry","larry","boss"); //傳入參數
          注意:new 關鍵字也能夠省略,可是儘可能不要省略
       2. 使用數組字面量
          由一對包含數組項的方括號表示,多個數組項之間用逗號分隔
          var arr = ["terry","larry","boss"];
          var arr = []   //空數組json

    2) 訪問數組元素
       數組變量名[索引]
    1.若是索引小於數組的長度,返回對應項的值
       var arr = ["terry","larry","boss"];
       arr[0] ;   //訪問數組中第一個元素,返回值爲terry
        2.若是索引大於數組的長度,數組自動增長到該索引值加1的長度
       var arr = ["terry","larry","boss"];
       arr[3] ="jacky"; //添加元素,數組程度變爲4數組

      數組最多能夠包含4 294 967 295個項函數

    3) 檢查數組
      var arr = [];
      typeOf(arr);  //返回object
      Array.isArray(arr); //判斷arr是不是數組類型firefox

  注:對象

    稀疏數組排序

      看到迭代數組時,檢查索引值是否是數組的一個屬性。繼承

        var ary=[0,1,2];索引

        ary[10]=10;隊列

        ary.filter(function(x){

          return x===undefined;

        });  // []

      ====>

        0 in ary;==>true

        1 in ary;==>true

        2 in ary;==>true

        3 in ary;==>flse

        10 in ary;==>true

     ====>

      也就是說從3-9都是沒有初始化的「坑」!這些索引並不存在於數組中,在array的函數調用的時候會跳過這些「坑」。


    4) 轉換數組爲字符串
    數組繼承Object方法,而且對這些方法進行了重寫
        toLocalString();
        toString();  在默認狀況下都會以逗號分隔字符串的形式返回數組項
     例如:
       var arr = ["terry","larry","boss"]; 
       arr.toString()  //terry,larry,boss
       valueOf(); 在默認狀況下以數組字面量的方式顯示(firefox)
       arr.valueOf();  ]//["terry","larry","boss"]; 
      join(); 使用指定的字符串用來分隔數組字符串
         例如:
           arr.join("||");  //briup||terry||jacky

        /*arr -Array-{能夠繼承的方法}-Object*/
          var arr = ["terry","tom",1,true,{age:12}];
          console.log(arr);
          //調用從父對象中繼承的toString方法
          console.log(arr.toString());
          //調用從父對象中繼承的join方法
          console.log(arr.join("-"));
          //序列化
          var json = JSON.stringify(arr);
          console.log(json);

    5) 棧,隊列方法
    1.棧  LIFO (Last-In-First-Out)
       push() 可接受任意類型的參數,將它們逐個添加到數組的末尾,並返回數組的長度
       pop()  從數組的末尾移除最後一項,減小數組的length值,返回移除的項
    2.隊列 FIFO (First-In-First-Out)
       shift()  移除數組中的第一個項而且返回該項,同時將數組的長度減一。
       unshift() 在數組的前端添加任意個項,並返回新數組的長度。

    6) 排序
       reverse()  反轉數組項的順序
       sort()  
         1.默認排序:該方法會調用每一個數組項的toString() 轉型方法,而後排序
         2.自定義排序:
       a.該方法能夠接受一個比較函數做爲參數,比較函數有兩個參數
       b.若是第一個參數位於第二個參數以前,返回負數
       c.若是第一個參數位於第二個參數以後,返回正數
       var arr = [11,5,23,7,4,1,9,1];
       console.log(arr.sort(compare));

     //該比較函數適合於大多數數據類型
       function compare(v1,v2){
          if(v1>v2){
             return -1;
          }else if( v1<v2){
             return 1;
          }else{
             return 0;
          }
       }

   

    var students = [{
         name:"terry",
         age:12,
         salary:3400,
         toString:function(){
            return "3"
         }
     },{
         name:"tom",
         age:13,
         salary:1400,
         toString:function(){
            return "1"
         }
    },{
         name:"vicky",
         age:10,
         salary:8400,
         toString:function(){
            return "2"
         }
    }];

    console.log(students);

    var result = students.sort((function(key){
       //返回比較器函數
       return function(a,b){
          if(a[key] < b[key]){
             return -1;
          }else if(a[key] > b[key]){
             return 1;
          }
       }
    })("age"));

    console.log(students);
    console.log(result);


 7) 操做方法
    concat() :先建立當前數組的一個副本,而後將接收到的參數添加到這個副本的末尾,返回副本
       var arr = ["aa","bb","cc","dd"];
       var arr_new = arr.concat("ee","ff");
       // arr_new = ["aa", "bb", "cc", "dd", "ee", "ff"]// arr不改變
    slice() :可接受一個或者兩個參數(返回項的起始位置,結束位置)
       當接受一個參數,從該參數指定的位置開始,到當前數組末尾的全部項
       當接受兩個參數,起始到結束之間的項,可是不包含結束位置的項
       例如:
         var arr = ["aa","bb","cc","dd"];
         1.接受一個參數時
             var arr_new = arr.slice(1);
            // arr_new = ["bb", "cc", "dd"],arr 不改變
         2.接受兩個參數時
             var arr_new = arr.slice(1,2); 
            // arr_new = ["bb"]; arr不改變
    splice() : 向數組的中部插入數據將始終返回一個數組,該數組中包含從原始數組中刪除的項。
         刪除:指定兩個參數(刪除的起始位置,要刪除的項數)
         插入:指定三個參數(起始位置,0,要插入的項任意數量的項)
         替換:指定三個參數(起始位置,要刪除的項,要插入的任意數量的項)

       例如:         var arr = ["aa","bb","cc","dd"];         1.刪除             var del_arr = arr.splice(1,2);            // arr = ["aa","dd"];  在原數組進行了刪除操做            // del_arr = ["bb","cc"];返回刪除的元素數組         2.插入             var del_arr = arr.splice(1,0,"ee","ff");            // arr =  ["aa", "ee", "ff", "bb", "cc", "dd"] 將指定項插入到1位置處            //del_arr = [], 返回空數組         3.替換             var del_arr = arr.splice(1,2,"ee","ff");            // arr =  ["aa", "ee", "ff", "dd"] 將"bb","cc" 替換成了"ee","ff"            //del_arr = ["bb", "cc"], 返回刪除的元素數組    indexOf()(要查找的項,開始查找的位置(可選)) 從數組開頭向後查找,使用全等操做符,找不到該元素返回-1         var arr = ["22","11","cc","dd","11"];         arr.indexOf(11); //返回-1,由於使用"==="進行匹配         arr.indexOf("11"); //返回1,從前日後匹配,返回第一個匹配元素的位置    lastIndexOf()(要查找的項,開始查找的位置(可選)) 從數組末尾向前查找,使用全等操做符,找不到該元素返回-1         var arr = ["22","11","cc","dd","11"];         arr.lastIndexOf("11"); //返回4,從後往前匹配,返回第一個匹配元素的位置        8) 迭代方法:      參數: 每一項上運行的函數,運行該函數的做用域對象(可選)    every();對數組中的每一運行給定的函數,若是該函數對每一項都返回true,則返回true       var arr = [11,5,23,7,4,1,9,1];       var result = arr.e       every(function(item,index,arr){          return item >2;       });       console.log(result); //false    some(); 對數組中的每一運行給定的函數,若是該函數對任一項都返回true,則返回true       var result = arr.every(function(item,index,arr){          return item >2;       });       console.log(result); //true    filter();對數組中的每一運行給定的函數,會返回知足該函數的項組成的數組       var result = arr.filter(function(item,index,arr){          return item >2;       });       console.log(result); // [11, 5, 23, 7, 4, 9]    map();對數組中的每一運行給定的函數,返回每次函數調用的結果組成的數組       var result = arr.map(function(item,index,arr){          return item * 2;       });       console.log(result); // [22, 10, 46, 14, 8, 2, 18, 2]    forEach();對數組中的每一運行給定的函數,沒有返回值,經常使用來遍歷元素       var result = arr.forEach(function(item,index,arr){          console.log(item);       });

相關文章
相關標籤/搜索