淺談 JavaScript 中 Array 型別的方法使用

七七呢發表於2019-07-11

前言: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():從陣列的末尾開始先前查詢。

 

相關文章