Array 物件
JavaScript 並沒有明確的陣列資料類型。不過你可以在你的應用程式中,使用預先定義的 Array
物件和他的方法來運用陣列。Array
物件有各種陣列的操作方法,如合併、反轉、排序。他還有用來確定陣列的長度的屬性,還有和正規表達式一起使用的屬性。
陣列是值的有序集合,你可以使用名稱或索引來參考這些值。例如,你有一個稱作 emp
的陣列,其中內含職員的名字,並按照職員的編號來索引。於是 emp[1]
就代表編號 1 的職員,emp[2]
就代表編號 2 的職員,依此類推。
陣列的建立
Array
物件的建立如下︰
1. arrayObjectName = new Array(element0, element1, ..., elementN) 2. arrayObjectName = new Array(arrayLength)
arrayObjectName
就是新物件的名稱、或者是既存物件的屬性。當使用 Array
的屬性和方法的時候,arrayObjectName
就是既存的 Array
物件的名稱、或者是既存物件的屬性。
element0, element1, ..., elementN
就是陣列元素的值的列表。如果指定了這個形式的話,陣列就會以指定的值作為元素來初始化,且陣列的 length 屬性會被設為參數的數目。
arrayLength
就是陣列的初期長度。下面的代碼建立帶有五個元素的陣列︰
billingMethod = new Array(5)
陣列的字面表達同時也是 Array
物件;舉例來說,下面的字面表達就是 Array
物件。參閱 陣列的字面表達 以取得陣列的字面表達的細節。
coffees = ["French Roast", "Columbian", "Kona"]
陣列的存放
你可以藉由把值代入給陣列自己的元素的方式來存放到陣列裡。例如,
emp[1] = "Casey Jones" emp[2] = "Phil Lesh" emp[3] = "August West"
你也可以在建立陣列的同時來作存放︰
myArray = new Array("Hello", myVar, 3.14159)
陣列元素的參考
你可以使用元素的序號來參考陣列的元素。例如,假設你定義了如下的陣列︰
myArray = new Array("Wind","Rain","Fire")
然後你可以使用 myArray[0]
來參考第一個元素,使用 myArray[1]
來參考第二個元素。
元素的索引是從零 (0) 開始的,不過陣列的長度(例如,myArray.length
)反映的是陣列中的元素的數目。
Array 的方法
Array
物件有以下的方法︰
concat
合併兩個陣列,並把新的陣列返回。
myArray = new Array("1","2","3") myArray = myArray.concat("a", "b", "c"); // myArray 現在是 ["1", "2", "3", "a", "b", "c"]
join(deliminator = ",")
把所有的陣列元素合併成字串。
myArray = new Array("Wind","Rain","Fire") list = myArray.join(" - "); // list 的內容是 "Wind - Rain - Fire"
pop
把陣列的最後一個元素移除掉,並把元素返回。
myArray = new Array("1", "2", "3"); last=myArray.pop(); // MyArray 現在是 ["1", "2"], last = "3"
push
在陣列的末端加入一個以上的元素,並返回陣列的最終長度。
myArray = new Array("1", "2"); myArray.push("3"); // MyArray 現在是 ["1", "2", "3"]
reverse
調換陣列的元素︰陣列的第一個元素變成最後一個元素,最後一個則變成第一個。
myArray = new Array ("1", "2", "3"); myArray.reverse(); // 調換陣列的結果是 myArray = [ "3", "2", "1" ]
shift
移除陣列的第一個元素,並返回被移除的元素。
myArray = new Array ("1", "2", "3"); first=myArray.shift(); // MyArray 現在是 ["2", "3"],first 是 "1"
slice (start_index, upto_index)
抽出陣列的片斷,並返回新的陣列。
myArray = new Array ("a", "b", "c", "d", "e"); myArray = myArray.slice(1,4); // 從索引 1 為起點抽出所有的元素,直到索引 4 為止,返回 [ "b", "c", "d" ]
splice(index, count_to_remove, addelement1, addelement2, ...)
加入並/或移除陣列的元素。
myArray = new Array ("1", "2", "3", "4", "5"); myArray.splice(1,3,"a","b","c", "d"); // MyArray 現在是 ["1", "a", "b", "c", "d", "5"] // 這個代碼從索引 1(也就是 "2")開始,把那裡的 3 個元素移除掉, // 然後把所有的連續元素插入到那個位置。
sort
把陣列的元素重新排序。
myArray = new Array("Wind","Rain","Fire") myArray.sort(); // 排序陣列的結果是 myArrray = [ "Fire", "Rain", "Wind" ]
sort
也接受 Callback 函數以確定該如何排序陣列的內容。這個函數會對兩個值作比較,並返回三個值的其中一者︰
- 如果 a 在排序系統中小於 b,返回 -1(或任意的負數)
- 如果 a 在排序系統中大於 b,返回 1(或任意的正數)
- 如果 a 和 b 被認為是同等的,返回 0。
舉例來說,下面的代碼將以陣列最後面的字母來排序︰
var sortFn = function(a,b){ if (a[a.length - 1] < b[b.length - 1]) return -1; if (a[a.length - 1] > b[b.length - 1]) return 1; if (a[a.length - 1] == b[b.length - 1]) return 0; } myArray.sort(sortFn); // 排序陣列的結果是 myArray = ["Wind","Fire","Rain"]
unshift
在陣列的前頭加入一個以上的元素,並返回陣列的新長度。
二維陣列
下面的代碼建立二維陣列。
a = new Array(4) for (i=0; i < 4; i++) { a[i] = new Array(4) for (j=0; j < 4; j++) { a[i][j] = "["+i+","+j+"]" } }
本例以如下的行來建立陣列︰
行 0:[0,0][0,1][0,2][0,3] 行 1:[1,0][1,1][1,2][1,3] 行 2:[2,0][2,1][2,2][2,3] 行 3:[3,0][3,1][3,2][3,3]
陣列和正規表達式
如果有一個陣列是正規表達式和字串之間比對的結果,這個陣列會返回有關比對的資訊的屬性和元素。陣列可以是 RegExp.exec
、String.match
、String.split
的返回值。若需要與正規表達式一同使用陣列的資訊,詳見第四章,正規表達式。