MDN wants to talk to developers like you: https://qsurvey.mozilla.com/s3/a3e7b5301fea

Array 物件

 

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.execString.matchString.split 的返回值。若需要與正規表達式一同使用陣列的資訊,詳見第四章,正規表達式

文件標籤與貢獻者

 此頁面的貢獻者: teoli, happysadman
 最近更新: teoli,