JavaScript之數組


目錄

數組1

創建數組2

訪問數組2

遍歷數組3

數組分類3

數組方法4

應用1

數組屬性1

排序算法1

1. 函數的值傳遞和引用傳遞(堆和棧及索引思維)1

對象的兩種創建方式1

應用:1

綜合應用:1

 

數組

定義:數組是一個可以存儲一組或一系列相關數據的容器。

為什么要使用數組?

   1:為了解決大量相關數據的存儲和使用的問題。

   2:模擬真實的世界(班級、軍隊)

創建數組

1:通過構造函數的方式來創建。 var a = new Array();

  1.直接賦值

   var a=new Array(數據1,數據2,…);

   --------------------------------------------------------------

   var a=new Array(數值)

       如果括號中只有一個元素,並且這個元素是數值類型的,那么他就是指定數組的長度。 並且它的值都是undefined

      數組的屬性:length 屬性 (獲取整個數組的長度)。

  2.聲明以后再賦值

var a=new  Array(); a[0]=1;  a[1]=2;  a[2]=3;

2JSON方式創建數組 var a=[];

1.直接賦值:

      var a=[1,2,3,4];

2.聲明以后再賦值:

      var a=[]; a[0]=1;  a[1]=2;  a[2]=3;

JS數組可以存儲任何類型的值。

訪問數組

通過數組的(中括號)下標訪問。

數組下標從0開始,他的最大值,是length-1。有8個元素的話,則長度是8,如果要訪問最后一個元素,則訪問7。因為下標從0開始,01234567

 

數組的操作

arr.push(數組元素......) 參數之間要用逗號隔開。

    向數組的末尾添加新的元素,返回值是新數組的長度。

    可以一次添加多個元素。

 

arr.pop()

    刪除數組的最后一個元素,返回刪除的元素

arr.unshift(數組元素.....)

    向數組的開頭加入新的元素,返回值是新數組的長度。

    可以一次添加多個元素arr.shift()

刪除數組的第一個元素,返回刪除的元素

 

遍歷數組

1for循環。

2while循環。

3for in循環。

for in的作用:

1:用於數組的遍歷。

2:用於對象屬性的遍歷。

數組分類

整數數組/字符串數組/對象數組/二維數組

 

按照維度來分類

     1.一維數組

     2.二維數組

     聲明二維數組:

var arr=[ [1,2,3], [4,5,6]];    alert(arr[1][1]);

//5

 

應用

1山上有一口缸可以裝50升水,現在有15升水。老和尚叫小和尚下山挑水,每次可以挑5升。問:小和尚要挑幾次水才可以把水缸挑滿?通過編程解決這個問題。

2定義一個含有30個整型元素的數組,按順序分別賦予從2開始的偶數;

然后按順序每五個數求出一個平均值,

放在另一個數組中並輸出。試編程。

3通過循環按行順序為一個5×5的二維數組a125的自然數,然后輸出該數組的左下半三角。試編程。

排序算法

1:冒泡排序

5,1,3,2,4

1,5,3,2,4

1,3,5,2,4

1,3,2,5,4

1,3,2,    4,            5

           1,       ,2,                  3                 4,                     5

 

思路分析:在要排序的一組數中,對當前還未排好的序列,從前往后對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。

即:每當兩相鄰的數比較后發現它們的排序與排序要求相反時,就將它們互換。

function bubbleSort (arr) {

    // 控制冒泡的
    for (var i = 0;i<arr.length-1;i++) {

        // 控制每輪冒出一個數需要比較的次數
        for (var j = 0; j < arr.length-1-i; j++) {
            if (arr[j] > arr[j+1]) {
                var temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
       }
    }
    return arr;
}

2選擇排序

思路分析:選擇排序和冒泡排序類似,也是依次對相鄰的數進行兩兩比較。不同之處在於,它不是每比較一次就調換位置,而是一輪比較完畢,找到最大值(或者最小值)之后,將其放在正確的位置,其他數的位置不變。

1,5,3,2,4

 

1,  5,3,2,4  //1

1,2    5,3,4 //2

1,2,3   5,4//3

1,2,3,4  5 //4

1,2,3,4,5 //5

 

function selectionSort(arr){

var len = arr.length,min;

for (i=0; i < len; i++){

// 將當前位置設為最小值

min = i;

// 檢查數組其余部分是否更小

for (j=i+1; j < len; j++){

if (arr[j] < arr[min]){

min = j;

}

}

// 如果當前位置不是最小值,將其換為最小值

if (i != min){

var temp = arr[i];

arr[i] = arr[min];    

arr[min] = temp;

}

} return arr;

}

1. 函數的值傳遞和引用傳遞

1:值傳遞

定義:調用函數時將實際參數復制一份傳遞到函數中,這樣在函數中如果對參數進行修改,將不會影響到實際參數。

2:引用傳遞

定義:調用函數時將實際參數的地址傳遞到函數中,這樣在函數中如果對參數所進行的修改,將影響到實際參數。

 

堆和棧及索引思維

棧(stack)和堆(heap)

棧為自動分配的內存空間;而堆 則是動態分配的內存。

基本類型和引用類型

  基本類型:存放在棧內存中的簡單數據段,數據大小確定,內存空間大小可以分配。

  5種基本數據類型有Undefined、Null、Boolean、Number 和 String,它們是直接按值存放的,所以可以直接訪問。

  引用類型:存放在堆內存中的對象,變量實際保存的是一個指針,這個指針指向另一個位置。每個空間大小不一樣,要根據情況開進行特定的分配。

  當我們需要訪問引用類型(如對象,數組,函數等)的值時,首先從棧中獲得該對象的地址指針,然后再從堆內存中取得所需的數據。

對象的兩種創建方式 

1.構造函數 創建對象

2.JSON形式創建對象 {name’zhangsan’}  或者 {‘name’’zhangsan’}

隨機點名程序

現有數組存在學生姓名 var arr = [‘zhangsan’,’lisi’] ,使用Math.random() 實現

應用:

1數組的冒泡排序

2數組的選擇排序

3編寫函數map(arr) 把數組中的每一位數字都增加30%

4編寫函數has(arr , 60) 判斷數組中是否存在60這個元素,返回布爾類型。

5.隨機生成一個五位以內的數,然后輸出該數共有多少位,每位分別是什么

綜合應用:

1編寫函數norepeat(arr) 將數組的重復元素去掉,並返回新的數組12,2,3,4,5

2有一個從小到大排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中。

3使用JSON形式創建一個對象,該對象存儲一個學生的信息,該對象包含學號、身份證、年齡、性別、所學專業等屬性信息,

同時該對象包含一個自我介紹的方法,用來輸出該對象的所有信息

4以下是某班級一次考試的成績表。請計算總成績,並按總成績排名。統計各單科成績第一名,輸出其成績與學號。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM