javaScript之數組(一)

1.***數組:多個變量的集合,起了一個統一的名字  --用法

                連續保存多個數據的引用類型的對象    --存儲

    爲什麼要使用數組:

        程序=算法+數據結構

            好的數據結構。可以極大提高程序的執行效率

    何時使用:程序中都是用數組集中管理多個數據


    如何使用:創建   賦值   取值

        1.創建:4種

            1.創建空數組:var 數組名=[];  -->js中見到[],就是數組

            2.創建數組同時,初始化數組中的每個元素:

                    var 數組名=[值1,值2,值3........];

                內存中的數組名:引用類型的對象;每個值相當於一個元素;每個元素都有一個下標;

                                            下標從0開始,每次增1,倒數個數-1

                數組對象的個數:arr.length      arr.length永遠等於最後一個下標+1


            3.創建空數組:var 數組名=new Array(); -->([n]);

                    new:創建一個新對象

                    Array:數組類型

                    n:表示初始元素的個數,省略則創建空數組

            

             4.創建數組同時初始化數組元素:

                    var 數組名=new Array(值1,值2 .....);

    

        如何使用數組中每個元素:數組名[i]

            數組名[i]的用法和普通的變量完全相同
             

        2.賦值:

               1.數組名[i]=值

               2.不限制:  --和其他語言最大的不同

                    1.不限制元素的個數:沒有數組越界錯誤,length自動增長爲最大下標+1

                    2.不限制元素的類型

             

        3.取值:任何位置使用數組名[i],等效於直接使用數組名[i]中的值

            數組是引用類型的對象:

                原始類型的值,複製後,相互不影響

            將數組中保存的數組對象的地址值,複製給另一個   ---引用類型

            引用類型的對象,賦值後,依舊引用同一個對象,任何修改,都會影響對方

    

       給一個數組賦值爲null,即爲釋放

            null:主動釋放一個對象

                垃圾回收器:專門釋放內存中不再被引用的對象的小程序,伴隨主程序執行;

                                     每個對象都有一個引用計數器,增加引用+1,減少引用-1

                                     一個對象,引用計數器爲0,不再被任何變量引用時,才能被回收

                    建議:使用完較大的對象後,都要主動釋放


                數組的length屬性固定套路:2個

                    1.獲得最後一個元素值:arr[arr.lenght-1]

                    2.向數組末尾追加一個新元素:arr[arr.lenght]=新值


        遍歷數組:依次對數組中每個元素執行相同操作

        //三要素:

            1.下標:i<數組長度

            2.變量:下標i從0開始,每次++

        for(var i=0;i<arr.length;i++){

                                當前元素:arr[i]

                                                }


        如何遍歷hash數組:

            for(var key in hashArr){//反覆取出每個key放入

                                                }

            for in 結構也可以遍歷索引數組,但是無法控制開始和結束,默認從頭開始到尾部結束

            今後:只要遍歷索引數組,選普通for循環;只要遍歷關聯數組,hash數組,只能用for in循環


            筆試題:例1:

var chyx=[];
chyx["name"]="小籠包";
chyx["sx"]=81;
chyx["yw"]=61;
chyx["yy"]=89;
var keys=[];
var i=0;
for(keys[i++] in chyx);//獲取一個關聯數組所有的下標
console.log(keys);//name sx yw yy

      例2:定義一個函數,找出一個整數中的最大值            

/*定義一個函數,找出一個整數中的最大值*/

    /*定義一個函數 getMax,接收一個數組對象參數arr
    * 將arr中第一個元素放入變量max
    * i從1開始遍歷arr中的元素的值
    * 如果當前元素>max
    * 將當前元素存入max中
    * 遍歷返回max*/

  function getMax(arr){
      var max=arr[0];
      for(var i=1;i<arr.length;i++){
          if(arr[i]>max){
              max=arr[i];
          }
      }
      return max
  }
  /*var arr=[4,6,2,5,9,7];*/
  console.log(getMax([4,6,2,5,9,7]))

 例3:定義函數,去掉數組中重複元素

/*定義函數,去掉數組中重複元素*/
/*定義函數delRepeat,接收一個數組arr*/
    function delRepeat(arr){
        //定義空數組hash
        //i從第一個元素開始遍歷arr中每個元素
        //  將當前元素作爲key,加入hash中,值設置爲1
        //(遍歷結束後)將arr重置爲空數組
        //使用for in循環將hahs中每個key放入arr中
        //返回arr
        var hash=[];
        for(var i=0;i<arr.length;i++){
            hash[arr[i]]=1;
        }
        arr=[];
        i=0;
        for (arr[i++] in hash);
        return arr;
    }
console.log(delRepeat(["a","a","d","v","v","r","f","a"]))


2.數組的API:瀏覽器廠商已經實現的方法;開發人員直接調用,不需要了解具體實現

        將數組裝換爲字符串:2個

            var str=arr.toString():返回數組中元素的內容,用逗號分隔

            var str=arr.join("連接符"):***可自定義鏈接符***

        固定套路:

            1.無縫拼接數組每個元素:var str=arr.join("") --如果不加“ ”,等效於加;

            2.將單詞拼接爲句子:var str=arr.join(" ");

            3.將數組拼接爲html元素:案例:

var provs=["北京市","天津市","河北省"];
var html="<select><option>"+provs.join("</option>><option>")+"</option></select>";

           優化:數組的拼接比字符串拼接效率更高!

            建議:今後凡是頻繁的字符串拼接,都要2步:

                    1.先將要拼接的子字符串放入一個數組中

                    2.調用數組的join方法,一次性生成結果字符串


        獲取數組字符串:toString()方法可以把數組轉換爲字符串,並返回結果

                                join([separator])返回一個字符串,由每個元素轉換而成的字符串使用指定的separator拼接而成

        獲取子數組:var subArr=arr.slice(stari,endi+1);

                        starti:開始獲取的下標位置

                        endi:表示獲取到的小標位置

                        ***含頭不含尾

                        slice方法支持倒數參數:其實負數下標不存在;假定的負數下標從-1開始


        splice:刪除   插入  替換

                        1.刪除:arr.splice(starti,n)  --starti位置開始,刪除n個元素

                        2.插入:arr.splice(starti,0,新值1,新值2....)  --starti位置插入新值1,新值2 ,原stari位置及其之後的元素,被 順移

                        3.替換:arr.splice(starti,n,新值1,新值2.....)

                                新元素的個數和n不一定相等

                                數組會自動調整元素的位置和長度

    

            顛倒數組中所有元素的位置:arr.reverse();

       強調:

           var x=arr[i];//arr[i],複製一份,改x,與arr[i],無關


3.數組的sort方法:arr.sort()

    特點:默認按升序排列;默認一切都轉爲字符串,再按字符串比大小

  自定義排序規則:2步:

     1.定義比較器函數:專門比較任意兩值大小的函數

        規定:兩個參數(a,b);

           必須返回數字:如果a>b,就要返回正數

                   如果a<b,就要返回負數

                  如果a=b,就要返回0      

//定義比較器函數
function compare(a,b){
    /* return a-b;*/
 return parseFloat(a)-parseFloat(b);
}

    2.將比較器函數對象作爲參數傳入sort方法中:

        arr.sort(比較器函數對象函數名)

//定義比較器函數
    function compare(a,b){
       /* return a-b;*/
        return parseFloat(a)-parseFloat(b);
    }
        arr.sort(compare);
            console.log(arr);

            //函數作爲對象傳給別人用,不加()


    冒泡排序:bubble --手寫級別

function bubble(arr,compare){
    for(var r=1;r<=arr.length-1;r++){
        for(var i=0;i<arr.length-r;i++){
            if(compare(arr[i],arr[i+1])>0){
                var temp=arr[i];
                arr[i]=arr[i+1];
                arr[i+1]=temp;
            }
        }
    }
}
    function compare(a,b){
        return parseFloat(a)-parseFloat(b);
    }
    var arr=['35px','12px','5px','123px'];
    bubble(arr,compare);
    console.log(arr);


    函數 VS 方法:

    1.都是function對象

    2.不屬於任何對象的叫函數(不需要通過.訪問)

    3.屬於特定對象的函數叫方法(需要通過對象,纔可以訪問)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章