JavaScript基礎-集合-Array

概要

在JavaScript中,數組以 Array 爲構造函數,是一個高階的類似有序列表的數據類型。

語法

[element0, element1, ..., elementN]
new Array(element0, element1[, ...[, elementN]])
new Array(arrayLength)
var arr = [];

屬性

constructor
指定創建對象原型的函數。注意該屬性值是一個指向函數自身的引用,而不是一個包含函數名稱的字符串。
index
如果數組是通過正則表達式匹配創建的,匹配是字符串的下標索引爲0.
input
如果數組是通過正則表達式匹配創建的,返回原始的字符串。
length
屬性表示一個無符號 32-bit 整數,返回一個數組中的元素個數。
prototype
Array.prototype 本身也是個數組。

方法

Mutator 方法

這些方法可以改變數組自身:

pop
移除數組的最後一個元素,返回值是被刪除的元素。
push(element1, ..., elementN) 返回數組長度
在數組的末尾添加一個或者多個元素,返回值是新的數組的長度。
reverse
顛倒數組中元素的順序,原先第一個元素現在變成最後一個,同樣原先的最後一個元素變成了現在的第一個,也就是數組的索引發生了變化。
shift
刪除數組的第一個元素,返回值是刪除的元素。
sort([compareFunction])
對數組中的元素進行排序。
splice

添加或刪除數組中的一個或多個元素。

array.splice(index , howMany[, element1[, ...[, elementN]]])

array.splice(index) // SpiderMonkey/Firefox extension

參數

index
從數組的哪一位開始修改內容。如果超出了數組的長度,則自動從數組末尾開始添加內容;如果是負值,則表示從數組末位開始的第幾位。
howMany
整數,表示要移除的數組元素的個數。如果 howmany 是 0,則不移除元素。這種情況下,至少應添加一個新元素。如果 howmany 超出了 index 位之後的元素的總數,則從 index 向後至數組末尾的全部元素都將被刪除(含第 index 位)。如果沒有指定 howmany 參數(如上第二種語法,是 SpiderMonkey 的擴展功能),將會刪除第 index 位之後的所有元素(不含第 index 位)。
element1, ..., elementN
要添加進數組的元素。如果不指定,則 splice 只刪除數組元素。

返回值

由被刪除的元素組成的一個數組。如果只刪除了一個元素,則返回只包含一個元素的數組。如果沒有刪除元素,則返回空數組。


unshift
添加一個或者多個元素在數組的開頭,返回值是新的數組的長度。

Accessor 方法

這些過程不改變數組自身These methods do not modify the array and return some representation of the array.

concat(value1, value2, ..., valueN)

返回一個包含此數組和其他數組和/或值的結合的新數組

參數

valueN
需要與原數組合並的數組或非數組值

indexOf

返回第一個與給定參數相等的數組元素的索引,沒有找到則返回-1。

searchElement
位於數組中的元素。
fromIndex

默認值: 0 (即在整個數組中查找指定元素)


join([separator = ','])將所有的數組元素連接成一個字符串。
lastIndexOf(searchElement[, fromIndex = 0])

方法返回指定元素(也即有效的 JavaScript 值或變量)在數組中的最後一個的索引,如果不存在則返回 -1。從數組的後面向前查找,從 fromIndex 處開始。


參數

searchElement
被查找的元素。
fromIndex
從此位置開始逆向查找。默認爲數組的長度減 1,即整個數組都被查找。如果該值大於或等於數組的長度,則整個數組會被查找。如果爲負值,將其視爲從數組末尾向前的偏移。即使該值爲負,數組仍然會被從後向前查找。如果該值爲負時,其絕對值大於數組長度,則方法返回 -1,即數組不會被查找。

slice(begin[, end])

返回數組中的一段。方法把數組中一部分的淺複製(shallow copy)存入一個新的數組對象中,並返回這個新的數組


toSource
searchElement[, fromIndex = arr.length - 1]
Returns an array literal representing the specified array; you can use this value to create a new array. Overrides the Object.toSource method.
toString
返回代表該數組及其元素的字符,重寫Object.toString 過程.
valueOf
Returns the primitive value of the array. Overrides the Object.valueOf method.

循環(迭代)過程

Several methods take as arguments functions to be called back while processing the array. When these methods are called, the length of the array is sampled, and any element added beyond this length from within the callback is not visited. Other changes to the array (setting the value of or deleting an element) may affect the results of the operation if the method visits the changed element afterwards. The specific behaviour of these methods in such cases is not always well-defined, and should not be relied upon.

filter(callback[, thisArg])

對數組中的每一個元素調用參數中指定的過濾函數,並將對於過濾函數返回值爲true的那些數組元素集合爲新的數組返回。

參數

callback
用來測試數組每個元素的函數。
thisArg
執行 callback 時的 this 值。

forEach(callback[, thisArg])

對數組的每一個元素依次調用參數中指定的函數。

參數

callback
在數組每一項上執行的函數,接收三個參數:
currentValue
當前項(指遍歷時正在被處理那個數組項)的值。
index
當前項的索引(或下標)。
array
數組本身。
thisArg
可選參數。用來當作callback 函數內this的值的對象。

every(callback[, thisArg])

如果數組中每一個元素都滿足參數中提供的測試函數,則返回真。

callback
用來測試每個元素的函數。
thisArg
執行 callback 時使用的 this 值。

map(callback[, thisArg])

創建一個新數組,新數組中含有,分別對於原來數組的每一個元素調用一個給定函數的結果

callback
原數組中的元素經過該方法後返回一個新的元素。
currentValue
callback 的第一個參數,數組中當前被傳遞的元素。
index
callback 的第二個參數,數組中當前被傳遞的元素的索引。
array
callback 的第三個參數,調用 map 方法的數組。
thisArg
執行 callback 函數時 this 指向的對象。

some(callback[, thisArg])

如果數組中至少有一個元素滿足參數函數的測試,則返回true。

參數

callback
用來測試每個元素的函數。
thisArg
執行 callback 時使用的 this 值。

Generic 方法

在Javascript數組對象上得許多方法也被設計用於那些看起來像數組的對象上。就是說,他們能被使用在任何一個有一個length屬性並且能夠通過數值屬性名來訪問的對象上(就像使用數組array[5]的下標)。

TODO: 給出使用 Array.prototype.forEach.call 的例子,並且添加這個方法給一個類似 JavaArray 或 String 的對象上。

一些方法,比如 join,僅僅讀取他們被調用的對象的長度和數值屬性。 另外,像 reverse 一樣,要求對象的數值屬性和長度屬性是可變的;因此,這些方法不能在像 String 這樣的對象上被調用,String不允許它的長度屬性和synthesized的數值屬性被設置。

那些在任何類Array對象上起作用並且不必修改長度和數值屬性的方法是:

那些修改被調用的對象的長度或者數字屬性的方法是:

這個例子展示瞭如何在一個 string 對象上使用 map 獲得一個展現字符值的以ASCII編碼的字節數組 :

var a = Array.prototype.map.call("Hello World", 
                                 function(x) { return x.charCodeAt(0); })
// a now equals [72,101,108,108,111,32,87,111,114,108,100]

例子

例子:創建數組

這個例子,創建了一個空數組,長度爲0,接着對msgArray[0]賦值,讓後對msgArray[99]賦值,數組長度變成了100。

var msgArray = new Array();
msgArray[0] = "你好";
msgArray[99] = "寶貝";
// 因爲數組元素msgArray[99]已經定義,
// 所以下面的條件成立。
if (msgArray.length == 100)
   myVar = "數組的長度是100。";

例子:二維數組

這個例子創建了一個二維數組myVar,然後賦值。

var myVar = "二維數組實例;\n";
a = new Array(4);
for (var i = 0; i < 4; i++) {
   a[i] = new Array(4);
   for (var j = 0; j < 4; j++) {
      a[i][j] = "[" + i + "," + j + "]";
   }
}
for (var i = 0; i < 4; i++) {
   str = "Row " + i + ":";
   for (var j = 0; j < 4; j++) {
      str += a[i][j];
   }
   myVar += str + ";\n";
}

下面是myVar的值:

二維數組實例;
Row 0: [0,0][0,1][0,2][0,3];
Row 1: [1,0][1,1][1,2][1,3];
Row 2: [2,0][2,1][2,2][2,3];
Row 3: [3,0][3,1][3,2][3,3];

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章