目錄
數組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;
2:JSON的方式創建數組。 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()
刪除數組的第一個元素,返回刪除的元素
遍歷數組
1:for循環。
2:while循環。
3:for 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的二維數組a賦1到25的自然數,然后輸出該數組的左下半三角。試編程。
排序算法
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) 將數組的重復元素去掉,並返回新的數組。【1,2,2,3,4,5】
2:有一個從小到大排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中。
3:使用JSON形式創建一個對象,該對象存儲一個學生的信息,該對象包含學號、身份證、年齡、性別、所學專業等屬性信息,
同時該對象包含一個自我介紹的方法,用來輸出該對象的所有信息。
4:以下是某班級一次考試的成績表。請計算總成績,並按總成績排名。統計各單科成績第一名,輸出其成績與學號。