數組
7.1數組的概念
案例:計算5名學生的平均成績
var a1,a2,a3,a4,a5;
a1 = Number(prompt("請輸入分數"));
a2 = Number(prompt("請輸入分數"));
a3 = Number(prompt("請輸入分數"));
a4 = Number(prompt("請輸入分數"));
a5 = Number(prompt("請輸入分數"));
var ave = (a1+a2+a3+a4+a5) / 5;
alert(ave);
這個程序很簡單,但是如果是100人呢,難道要真的複製100遍?
怎麼解決?顯然需要循環。
但是嘗試一下就會發現,循環使用不上,因爲無法去控制a1,a2,也就無法循環控制變量a1、a2聯繫起來。
var a = [];
var sum = 0;
for(var i=0; i<5; i++){
a[i] = Number(prompt("請輸入分數"));
sum += a[i];
}
var ave = sum/a.length;
alert(ave);
這段代碼能夠實現同樣的功能,而且如果是100人的話,只要把循環的條件改爲i<100即可,整個程序的結構和代碼量和人數多少沒有關係。
爲什麼和人數沒有關係?因爲和循環結合起來了。
爲什麼能和循環結合起來呢?因爲我們把變量的表示方式改變了,即名稱+序號的方式,那麼序號是可以用循環變量去控制。
7.2數組的定義與元素訪問
定義有三種方式:
(1)var a = [];
(2)Var a = new Array();
(3)Var a = [0,0,0];
訪問元素:數組名+下標
a[0] a[3]
需要注意的是下標從0開始,
所以在使用的時候需要注意越界問題,比如5個元素的數組,那麼它的下標範圍爲[0-4],不包括5,5已經越界了。
數組的本質:一組變量的集合,或者說是一組內存單元。只不過對於變量的表示方式使用的是數組名+下標的方式。
7.3數組的常用屬性和方法
數組的屬性:
length:
(1)告訴我們數組的長度:數組名.length
(2)通過該屬性可以改變數組的長度
數組的常用方法:
(1)unshift()在數組的頭部添加元素,返回值是新數組的長度
shift():刪除數組頭部的元素,返回值是刪除的頭部元素。
(2)indexOf():查找在數組中重複出現的元素第一次出現的位置,返回值是該元素的下標。
lastIndexOf():查找在數組中重複出現的元素最後一次出現的位置,返回值是該元素的下標。
(3)push:在數組的尾部插入元素,返回值是添加元素後數組的長度。
pop():從數組的尾部刪除最後一個元素,返回值是刪除的元素
(4)slice(開始位置的下標,結束位置的下標):提取數組中指定連續的子數組。前包括,後不包括。
(5)splice(開始刪除位置的下標,要刪除元素的長度,要選擇插入或替換的內容),splice有“剪接”的含義。前面兩個參數定義“剪”的部分,第三個參數定義“接”的部分,經過不同的參數組合就可以實現一下三個功能。
①刪除操作:刪除數組中指定的任意元素
②插入操作:在數組中指定位置插入元素
③替換操作:在數組中替換指定位置的元素
如果有刪除元素,則返回刪除元素的數組,否則爲空。
(6)reverse將數組中的元素倒序輸出。在原數組的基礎上進行反序輸出,不會創建新數組。
(7)map:原數組的映射,經過函數的加工。函數給出前面兩個參數,改變的是原數組,不給的話,返回新數組。
一般我們傳遞的參數都是數組、字符串等類型的數據,有些時候可能需要傳遞一個函數,那麼如何去傳遞一個函數呢?
var a = [2,4,6,8];
var b = a.map(fun);
alert(a);
alert(b);
}
function fun(value,index,self){
return value*value;
}
我們可以將以上內容簡寫爲:
var a = [2,4,6,8];
var b = a.map(function (value,index,self){
return value*value;
});
alert(a);
alert(b);
這就是匿名函數。
7.4for……in循環
一般而言,我們遍歷一個數組用的都是for循環,會對所有元素進行遍歷
var arr = [1,2,3,4,5,6];
for(var n=0; n<arr.length; n++){
alert(arr[n]);
}
alert(arr);
用for……in循環
var arr = [1,2,3,4,5,6];
for(var i in arr){
arr[i];
}
alert(arr);
結果與上面的代碼相同
但是for與for……in還是有區別的
var arr = [1,2,3,4,5,6];
arr[10] = 10;
for(var n=0; n<arr.length; n++){
alert(arr[n]);
}
alert(arr);
var arr = [1,2,3,4,5,6];
arr[10] = 10;
for(var i in arr){
alert(arr[i]);
}
alert(arr);
從結果可以看出for……in不會遍歷沒有定義的元素
此外for……in還可遍歷對象
var student = {
name:"張三",
sex:"男",
age:29
};
for(var p in student){
document.write(student[p]+"<br>");
}
結果顯示的是student對象的所有屬性值,值得注意的一點是這裏要查看對象的某個屬性值用的是數組的形式而不是對象名+“.”+屬性名。
也可以用student[“sex”]訪問對象的屬性