Array
JavaScript的數組在程式中使用的頻率非常高,而且Array本身提供的方法也異常強大。如果不能很好的掌握,不僅對不光是在寫程式會卡殼或繞彎,而且對於其他的外掛程式的源碼的學習理解都會有障礙。本文主要列舉常用的函數,已經ECMAScript 5提供的新的資料方法。
ECMAScript中的數組與其他多數語言中的數組有著相當大的區別。雖然ECMAScript數組與其他語言中的數組都是資料的有序列表,但與其他語言不通的是,ECMAScript數組的每一項可以儲存任何類型的資料,而且ECMAScript數組的大小事可以動態調整的,可以隨著資料的添加自動成長以容納新增資料。
1、 數組檢測
var isArray = function(obj) {return Object.prototype.toString.call(obj) == '[object Array]';}
2、 轉換方法
toString(),valueOf(),toLocaleString()返回數組總每個值的字串形式拼接的一個以都好分割的字串。
3、 棧方法
push和pop方法組合可以類比棧的後進先出的資料結構。
push()方法接收任意數量的參數,把它們逐個添加到數組的末尾,並返回修改後數組的長度。
pop()方法則從數組末尾移除最後一項,減少數組的length值,然後返回移除的項。
4、 隊列方法
push和shift方法組合可以類比隊列先進先出的資料結構
shift()方法移除數組中的第一個項並返回該項,同時將數組長度減1。
5、 重排序方法
reverse()方法用於顛倒數組中元素的順序。
sort() 方法用於對數組的元素進行排序。注意,sort方法比較的是字串。
文法:arrayObject.sort(sortby)
參數:sortby 可選。規定排序次序。必須是函數。
傳回值:對數組的引用。請注意,數組在原數組上進行排序,不產生副本。
6、 操作方法
concat() 方法用於串連兩個或多個數組。該方法不會改變現有的數組,而僅僅會返回被串連數組的一個副本。
文法:arrayObject.concat(arrayX,arrayX,......,arrayX)
參數:arrayX必需。該參數可以是具體的值,也可以是數組對象。可以是任意多個。
傳回值:返回一個新的數組。該數組是通過把所有 arrayX 參數添加到 arrayObject 中產生的。如果要進行 concat() 操作的參數是數組,那麼添加的是數組中的元素,而不是數組。
slice() 方法可從已有的數組中返回選定的元素。
文法:arrayObject.slice(start,end)
參數:
start 必需。規定從何處開始選取。如果是負數,那麼它規定從數組尾部開始算起的位置。也就是說,-1 指最後一個元素,-2 指倒數第二個元素,以此類推。
end 可選。規定從何處結束選取。該參數是數組片斷結束處的數組下標。如果沒有指定該參數,那麼切分的數組包含從 start 到數組結束的所有元素。如果這個參數是負數,那麼它規定的是從數組尾部開始算起的元素。
傳回值:返回一個新的數組,包含從 start 到 end (不包括該元素)的 arrayObject 中的元素。
說明:請注意,該方法並不會修改數組,而是返回一個子數組。如果想刪除數組中的一段元素,應該使用方法 Array.splice()。
splice() 方法用於插入、刪除或替換數組的元素。
文法:arrayObject.splice(index,howmany,element1,.....,elementX)
參數:
index必需。規定從何處添加/刪除元素。該參數是開始插入和(或)刪除的數組元素的下標,必須是數字。
howmany 必需。規定應該刪除多少元素。必須是數字,但可以是 "0"。如果未規定此參數,則刪除從 index 開始到原數組結尾的所有元素。
element1可選。規定要添加到數組的新元素。從 index 所指的下標處開始插入。
elementX可選。可向數組添加若干元素。
傳回值:如果從 arrayObject 中刪除了元素,則返回的是含有被刪除的元素的數組。
說明:splice() 方法可刪除從 index 處開始的零個或多個元素,並且用參數列表中聲明的一個或多個值來替換那些被刪除的元素。
7、 位置方法
indexOf()和lastIndexOf,這兩個方法都接收兩個參數:要產假的項和(可選的)表示尋找起點位置的索引。indexOf方法從數組的開頭向後尋找,lastIndexOf方法則從數組的末尾開始向前尋找。兩個方法都返回要尋找的項在數組中的位置,如果沒有找到則返回-1
8、 迭代方法
ECMAScript 5中定義的5個迭代方法,非常有用,可以大大方便處理數組的任務。目前支援的這些方法的瀏覽器有IE9+、Firefox2+、Safari3+、Opera9.5+和chrome。
每個方法都接收兩個參數:要在每一項上啟動並執行函數和(可選的)運行該函數的範圍對象-影響this的值。傳入這些方法中的函數會接收三個參數:數組項的值、該項在數組中的位置和數組對象本身。
every()和some()方法,用於查詢數組中的項是否滿足某個條件。對於every()來說,傳入的函數必須對每一項都返回true,這個方法返回true,否則返回false。some()方法則是只要傳入函數對數組中的莫一項返回true,就返回true。
var numbers = [1,2,3,4,5,4,3,2,1];var everyResult = number.every(function(item, index, array) {return item > 2;});alert(everyResult);//falsevar someResult = numbers.some(function(item, index, array) {return item > 2;});alert(someResult);//true
filter()方法利用指定的函數確定是否在返回的數組總包含的某一項,並返回該函數會返回true的項組成的數組。這個方法對於查詢符合某些條件的所有數組項非常有用。
var filterResult = number.filter(function(item, index, array) {return item > 2;});alert(filterResult);//[3,4,5,4,3]
map()也返回一個數組,而這個數組的每一項都是在原始數組中的對應項上運行傳入函數的結果。即返回每次函數調用的結果組成的數組。
var mapResult = numbers.map(function(item, index, array) {return item * 2;});alter(mapResult);//[2,4,6,8,10,8,6,4,2]
forEach()方法只是對數組中的每一項運行傳入的函數,沒有傳回值。
numbers.forEach(function(item, index, array) {//doSomething});