標籤:i+1 array 調用 連結 數字 添加元素 使用數組 移動 設定
第七章 數組
一、建立數組
使用數組直接量是最簡單的方法:
var empty=[];var primes=[1,3,5,7,11];var m=[1.1,"a",true];var b=1024;var table=[b,b+1,b+2];var bc=[[1,{x:1,y:2}],[2,{x:3}]]//如果直接量中省略某個值,則預設賦予undefined值var count=[1,,3];
數組直接量中允許元素結尾有逗號:
var a=[1,2,]; //兩個元素分別為1和2var b=[true,,]; //兩個元素分別為true和undefined
另外一種方法是調用建構函式Array():
var arra=new Array(); //無參數var arrb=new Array(10); //建立一個長度為10的數組var a=new Array(5,3,1,"testabc"); //顯式指定元素
二、數組元素的讀寫
var a=["world"];var value=a[0]; //讀第0個元素a[1]=3.14; //寫第1個元素i=2;a[i]=3; //寫第2個元素a[i+1]="hello"; //寫第3個元素a[a[i]]=a[0]; //讀第0個和第2個元素,寫第3個元素
數組是對象的特殊形式,使用方括弧訪問數組元素就像用方括弧訪問對象的屬性一樣——即JavaScript把數組的數字索引轉換成字串:即索引值0變為“0”,索引值1變為“1”,然後將其作為屬性名稱使用。這一點對於常規對象也可以這樣做:
var o={}; //建立一個普通對象o[1]="one";
雖然如上所述,但對於數組來說,其特別之處在於可以自動維護length屬性值(當長度小於2^32)。所有的索引都是屬性名稱,但只有0~(2^32-2)之間的整數的屬性名稱才可以作為索引。所有數組都是對象
三、稀疏數組
稀疏數組就是包含從0開始的不連續索引的數組,因此稀疏數組的length屬性值是大於元素實際的個數的。
a=new Array(5); //數組沒有元素,但是長度為5a=[]; //建立一個空數組,length=0a[1000]=0; //給數組a 添加元素,此時length=1001
四、數組長度
當設定數組length屬性值為一個小於當前長度的整數值時,數組則會相應變化。
a=[1,2,3,4,5];a.length=3; //此時a變成[1,2,3]a.length=0; //此時a變成[]a.length=5; //此時a長度為5,但沒有元素,類似於new Array(5)
如果將length屬性值設為大於當前長度的整數值,這並不會向數組中添加元素,而只是在原數組尾部建立一個空的地區。
五、數組元素的添加和刪除
直接為新索引賦值:
a=[];a[0]="zero";a[1]="one";
也可以用push()方法在尾部增加一個或多個元素,這種方法在操作增加一個元素時和給數組a[a.length]賦值是一個效果:
a=[];a.push("zero");a.push("one","two"); //此時a為["zero","one","two"]
如果要在數組首部插入一個元素,可以使用unshift()方法,其他元素依次移動到更高索引位置上。
a=[1,2,3];delete a[1]; //此時索引1處沒有元素,a變成稀疏數組1 in a; //falsea.length //依舊為3,長度不變。
另外可以把length設定小以刪除尾部的元素。數組也有pop()方法,每次使用減少長度1並返回被刪除的元素值。還有一個shift()方法,從頭部刪除一個元素。
六、數組遍曆
使用for迴圈是遍曆數組最常見的方法:
var keys=Object.keys(o); //獲得o對象屬性名稱組成的數組var values=[];for(var i=0; i<keys.length;i++) { var key=keys[i]; values[i]=o[key];}
七、多維陣列
var table=new Array(10);for(var i=0;i<table.length;i++) table[i]=new Array(10);for(var row=0;row<table.length;row++) { for(col=0;col<table[row].length;col++) { table[row][col]=row*col; }}
八、數組方法
1、join()將數組中所有元素都轉換成字串並連結在一起,返回最後產生的字串。預設使用逗號進行分隔,也可以指定參數作為分隔字元。
var a=[1,2,3];a.join(); //"1,2,3"a.join(" "); //"1 2 3"a.join(""); //"123"var b=new Array(10);b.join("-"); //"---------";9個連字號
2、reverse()方法將數組中的元素倒序,返回逆序後的數組,替換原數組。
var a=[1,2,3];a.reverse().join(); //"3,2,1",a也變成了[3,2,1]
3、sort()方法將數組元素依據一定規則進行排序,當沒有參數時,元素用字母表順序排序。數組中的undefined元素,會被排到數組尾部。
var a=new Array("banana","cherry","apple");a.sort();var s=a.join(", "); //“apple, banana, cherry”
4、slice()方法返回指定數組的一個片段或子數組。
var a=[1,2,3,4,5];a.slice(0,3); //返回[1,2,3]a.slice(3); //返回[4,5]a.slice(1,-1); //返回[2,3,4]a.slice(-3,-2); //返回[3]
5、splice()方法能從數組中刪除元素、插入元素到數組中或同時兩個操作。第一個參數指定了插入或刪除的起始位置,第二個參數指定了應該從數組中刪除的元素的個數,如果第二個參數省略,則從起始點到數組結尾所有元素都將被刪除。splice()返回一個由刪除元素組成的數組,如果沒有刪除元素就返回空數組。
var a=[1,2,3,4,5,6,7,8];a.splice(4); //返回[5,6,7,8],a變成[1,2,3,4]a.splice(1,2); //返回[2,3],a變成[1,4]a.splice(1,1); //返回[4],a變成[1]
splice()前兩個參數指定了需要刪除的數組元素,緊隨其後面的任意個參數指定了需要插入到數組中的元素,插入的位置由第一個參數指定。
var a=[1,2,3,4,5];a.splice(2,0,‘a‘,‘b‘]; //返回[];a變成[1,2,‘a‘,‘b‘,3,4,5]a.splice(2,2,[1,2],3); //返回[‘a‘,‘b‘];a變成[1,2,[1,2],3,3,4,5]
6、push()/pop()方法:push()在數組尾部添加一個或多個元素,並返回數組新的長度。pop()則刪除數組的最後一個元素,減少數組長度並返回被它刪除的值。兩個方法都修改並替換的原數組。
JavaScript權威指南(第6版)學習筆記四