前言:Array 型別是 JavaScript 中除了 Object 型別以外最常用的型別。
一、建立陣列
JavaScript 中的陣列與其他語言中的陣列有著很大的區別。例如Java、PHP等語言中的陣列都是一組有序的資料,而 JS 中的陣列可以包含多種型別的資料。
建立方式:
1. Array 建構函式定義陣列 ---------- var 陣列名 = new Array();
var colors = new Array(20); //直接傳遞陣列數量,length 值為20,即建立一個包含20項的陣列。
var colors = new Array("red","blue","green"); //傳遞陣列中包含的項,即建立一個包含3個字串的陣列。
var colors = Array(20); //也可以省略 new 操作符,結果相同。
2. 字面量方式定義陣列 ---------- var 陣列名 = [ ];
var values = []; //定義了一個空陣列
var values = [1,2,3] //定義了一個包含3項的陣列
JS 中的陣列可以隨著資料的增加調整大小,例如:
var colors = ["blue","green","black"]; //建立一個包含三個字串的陣列
colors[colors.length] = "brown"; //(在位置3)新增一個字串
colors[99] = "red"; //(在位置99)新增一個字串 ,但位置4到98之間實際上是不存在,返回的都是undefined
console.log(colors.length); //100
二、檢測陣列
自從 ECMAscript3 做出規定後,就出現了一個經典問題 ------- 確立某個物件是不是陣列。
1. 對於一個網頁或者一個全域性作用域內,使用 instanceof 操作符。
* 但如果網頁中包含多個框架,那麼就存在兩個或以上不同的全域性執行環境,這種方法就不適用。
2.判斷某個值是不是陣列,不考慮是在哪個全域性作用域內建立的,使用 Array.isArray() 方法。
三、轉換方法
所有物件都有 toString() 方法、toLocalString()方法、valueOf()方法。
toString() :將陣列中的值轉換成用逗號分隔的字串。
toLocalString():將陣列中的值轉換成本地陣列。
valueOf():返回陣列的原始值。
四、棧方法
JS 的陣列中也提供了一種讓陣列的行為類似於其他資料結構的方法,也就是陣列可以表現的像棧一樣。
棧是一種LIFO(後進先出)的資料結構,可以限制資料的插入和移除。而資料的插入和移除都發生在棧的頂部。
ECMAscript 為陣列提供了 push()和 pop()方法。
push() 方法可以接受任意數量的引數,並將他們新增至陣列的末尾,並返回修改後的陣列長度。
pop() 方法可以從陣列的末尾移除一項,減少 length 值,並返回移除的項。
五、佇列方法
佇列資料結構的訪問規則是 FIFO(先進先出),佇列在列表的末端新增項,在列表的前端移除項。
由於 push()方法是從資料的末端新增項,因此只需一個從資料的前端取得項的方法即可,而實現這一操作的方法就是shift()方法。
此外,還有一種方法 unshift(),是從陣列的前端新增項並返回新陣列的長度。
unshift()和 pop()方法同時使用,可以從相反的方向模擬佇列,即從陣列的前端新增項,從陣列的末端移除項。
六、 重排序方法
顧名思義,就是對陣列進行重新排序,且陣列中已經存在這樣的兩個方法,即 reverse()方法和 sort()方法。
reverse()方法是直接反轉陣列的順序,但始終是不太靈活的。
sort()方法則會呼叫每個陣列項的 toString()轉換方法,比較轉換來的字串進行排序,但也不是最佳方案,比如轉換成字串的“5”就比“10”大,也不符合常理。
以上方法單獨使用都不是最優解,因此可以用 sort()方法接收一個比較函式做為引數,以便於指定哪個值在前哪個值在後。
七、操作方法
ECMAscript 為陣列中已存在的項提供了很對操作方法。
1. contact():為當前陣列建立一個副本。如果給 contact 方法傳遞引數,將接收到的引數新增至陣列的末尾,最後返回一個新陣列。(原來的陣列保持不變)
如果沒有傳遞引數,則只複製陣列並返回副本。
2. slice():基於當前陣列的一項或多項建立一個新陣列。語法:slice(返回項起始位置項,結束位置(但不包含結束位置的項));如果只有一個引數,則返回該項到陣列末尾的所有項。(原陣列不變)
!!!如果傳入的引數中有一個負數,則用陣列長度加上該數來確定相應的位置;如果結束位置小於起始位置,則返回空陣列。
3. splice():在陣列的中部插入項。
• 刪除:刪除任意數量的數 ------ 陣列名.splice(刪除的起始項的索引位置,要刪除的項數)
• 插入:從指定位置插入項 ------ 陣列名.splice(起始索引位置,0(要刪除的項數),要插入的項)
• 替換:從指定位置插入項 ------ 陣列名.splice(起始索引位置,要刪除的項數,要插入的項)
八、位置方法
用於返回要查詢的項在陣列中的位置,或者在沒找到的情況下返回-1。
indexof():從陣列的開頭(位置0)向後查詢。
lastIndexOf():從陣列的末尾開始先前查詢。