數組2

1. ***數組: 

   API: 

     拼接和選取

     修改

     翻轉

****排序: 自定義排序算法: 冒泡排序

              sort()


1. 拼接和選取: 

   拼接: 將其它元素或其它數組拼接到當前數組末尾,返回新數組

      var newArr=arr1.concat(值1,值2,arr2,......)

      強調: 1. 無權修改原對象,只能返回新對象

               2. 打散傳入的數組參數——珍貴

   選取: 複製原數組中指定位置的元素組成新數組

      var subArr=arr1.slice(starti,endi+1);

      強調: 1. 無權修改原對象,只能返回新對象

               2. 規律: 所有兩個參數都是下標的API,都含頭不含尾

      簡寫: 1. 省略第二個參數: arr1.slice(starti)

                      從starti位置一直選取到結尾

               2. 不寫參數: arr1.slice()——複製整個數組中所有元素

               3. 如果離結尾近: 

                      arr1.slice(arr1.length-n,arr1.length-m+1)

                      選擇倒數第n到倒數第m的元素

                      arr1.slice(-n,-m+1);


2. 修改數組splice: 刪除,插入,替換

    刪除: arr.splice(starti,n) 從arr中starti開始,刪除n個元素

        強調: 1. 不遵循含頭不含尾

                 2. 直接修改原數組

                 3. starti也支持負數參數,表示倒數第n個位置

        簡寫: 省略第二個參數: arr.splice(starti) 刪除starti後所有

        返回值: var deletes=arr.splice(starti,n)

              返回被刪除的元素組成的臨時新數組

    插入: arr.splice(starti,0,值1,值2,...)

              在arr中starti位置插入: 值1,值2,...

              原starti位置及其之後的值,向後順移

        強調: 不能打散數組參數

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

              在arr中先刪除starti位置後的n個元素

                         再在starti位置插入新元素

        強調: 刪除的元素個數和插入的新元素個數不必一樣

                數組自動調整length

3. 翻轉數組: arr.reverse();

4. ****排序: 

    自定義排序算法: 冒泡,快速,插入

       冒泡: 原理: 

1. ***數組:

   排序: 

   棧和隊列:

   二維數組:

2. ***String


1. 排序: 

    自定義排序: 冒泡

    排序API: arr.sort();

       大問題: 默認將所有元素轉爲字符串再按字符串排列

                  只能對字符串類型的元素正確排序

       解決: 自定義比較規則: 

         比較器函數: 專門比較任意兩值大小的函數: 

                   要求: 兩個參數: a,b

                            返回值: 如果a>b,就返回正數

                                        如果a<b,就返回負數

                                        如果a=b,就返回0

         最簡單的數字比較器函數: 

           function compare(a,b){return a-b;}

         如何使用: 將比較器函數名作爲參數傳入sort函數中

           arr.sort(compare) //強調: 不要加()

           compare函數作爲參數傳入sort中,被sort反覆調用

         降序: 顛倒比較器函數的正負號,可改升序爲降序

           最簡單的數字降序比較器函數: 

              function compare(a,b){return b-a;}


2. 棧和隊列: js中沒有專門的棧和隊列類型

                   一切棧和隊列都是用普通數組模擬的

   棧: 一端封閉,只能從另一端進出的數組

    特點: FILO

   何時: 今後只要希望始終使用最新的元素時

   如何: 

      1. 從結尾出入棧: 

          入: arr.push(值) => arr[arr.length]=值

          出: var last=arr.pop()

          特點: 每次出入棧,都不影響其他元素的位置

      2. 從開頭出入棧:

          入: arr.unshift(值)

          出: var first=arr.shift()

          特點: 每次出入棧,其它元素位置都會依次順移

         

   隊列: 只能從一端進入,從另一端出的數組

     特點: FIFO

   何時: 只要希望按先後順序使用數組中的元素時

     1. 結尾入: 入: arr.push(值)

     2. 開頭出: var first=arr.shift()

        

3. 二維數組: 

  什麼是: 數組中的元素又引用了另一個子數組

  何時: 1. 保存橫行豎列的二維數據結構

           2. 對一組數據,再進行細緻分類時

  如何: 

     創建: 2種:

        1. 創建數組時,還不知道子數組的內容: 

            var arr=[];

            arr[0]=[值1,值2,...]; 

            arr[1]=[值1,值2,...];

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

             var arr=[

                   [值1,值2,...],

                   [值1,值2,...],

                   ...

             ]

     訪問: arr[r][c]->用法和普通數組元素的用法完全一樣

         強調: 二維數組,行下標r不能越界!——報錯!

     遍歷: 外層循環控制行,內層循環控制列

        for(var r=0; r<arr.length; r++){//遍歷每一行

            for(var c=0;c<arr[r].length;c++){//遍歷第r行中每一列

            arr[r][c]//當前元素

            }

        }


     練習: Math.random() 生成0~1之間的一個隨機小數


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章