1. 程式人生 > >Javascript陣列系列一之棧與佇列

Javascript陣列系列一之棧與佇列

所謂陣列(英語:Array),是有序的元素序列。 若將有限個型別相同的變數的集合命名,那麼這個名稱為陣列名。 組成陣列的各個變數稱為陣列的分量,也稱為陣列的元素,有時也稱為下標變數。 ---百度百科

簡單理解,陣列就是資料的有序列表。

Array 在 Javascript 中屬於最常用的資料型別之一了,與其它語言一樣 Javascript 中的陣列也是資料的有序列表,但是與其他語言有所不同的是,它可以用於儲存任何資料型別,而且陣列的長度是可以動態調整的。

var elements = ['first', 2, {age: 14}];

建立陣列

既然認識了陣列,那我們先看怎麼建立一個數組吧!Javascript 提供兩種建立陣列的方法。

1.通過建構函式建立

var arr1 = new Array(); //[]var arr2 = new Array(3); //[,,] 建立一個包含三項的陣列var arr3 = new Array(3, 4) //[3, 4]var arr4 = new Array('3'); //['3']var arr5 = new Array('2','3'); //['2','3']
看到上面的結果簡直蒙逼,因此可以看出引數傳遞的不同產生的結果也會不一樣,而且結果令人驚訝,不過我們可以總結為:如果傳入一位數值型別的引數時,則建立給一個定項的陣列(例如 arr2 ),如果傳入其他型別的引數時,則會建立一個包含當前引數的陣列(例如 arr4, arr5),

我們這個方法比較坑,所以一般不會使用這個方法去建立陣列,那麼我們繼續看下一個方法如何建立陣列的。

2.通過字面量建立

var arr1 = [];var arr2 = [1, 2];var arr3 = ['1', '3'];
就是這麼簡單,粗暴,明瞭;是我們建立陣列最常用的方法,而且這種方法建立還非常高效。

如何訪問和設定陣列

上面說到我們是如何建立一個數組,陣列創建出來之後我們需要對陣列中的元素進行訪問或修改吧?下面我們就來看看吧

  • 訪問陣列,通過索引訪問陣列中的元素,索引從 0 開始,如果訪問的索引大於陣列中元素的個數怎麼辦呢?結果肯定是找不到的,所以會返回 undefined 。

說到陣列元素的個數我們不能不提到陣列的一個屬性了,那就是 length 屬性,它會返回當前陣列元素的個數,而且 length 屬性不是隻讀屬性,它還可以去修改,因此我們利用 length 屬性即可以新增陣列的元素,還可以刪除陣列的元素。

var arr = ['first', 'second', 'three'];console.log(arr[0]); //firstconsole.log(arr[1]); //secondconsole.log(arr[3]); //undefined//利用 length 刪除元素arr.length = 2;console.log(arr); //["first", "second"]//利用 length 新增元素(可以利用此方法在陣列的末尾新增元素)arr[arr.length] = 'five';console.log(arr); //["first", "second", "five"]

如何表現的和「棧」一樣

想要知道陣列怎麼表現的和「棧」一樣,首先我們先來了解一下什麼是「棧」。

在這裡我們不深究「棧」,如果深究下去一時半會我們也說不清楚,也不是我們本文的重點。

簡單來說,「棧」是一種資料結構,一種 LIFO (Last-In-First-Out)的資料結構,也就是後進先出,最新新增進來的元素最早被移出。在 「棧」中新增資料和刪除資料也被稱為推入和彈出,而且推入和彈出只會發生在「棧」的頂部。

stack 圖片stack 圖片

Javascript 提供為陣列提供了兩個方法以便於我們實現「棧」的行為,下面我們就來看看吧。

  • push : 向陣列的末尾新增元素,可以傳入任意數量的引數
  • pop:從陣列的末尾刪除最後一項,返回刪除的元素,使陣列的 length-1
var arr = ['A', 'B', 'C'];arr.push('D');console.log(arr); //['A', 'B', 'C', 'D']var rem = arr.pop();console.log(arr);//['A', 'B', 'C']console.log(rem); // 'D'

如何表現的和 「佇列」一樣

上回我們說到 Javascript 中的陣列可以有「棧」一樣的行為,那麼它也可以表現出和「佇列」一樣的行為。

「棧」是一種 LIFO 資料結構,而「佇列」則是一種 FIFO(First In First Out)的資料結構,即先進先出。

資料在「佇列」的末尾新增元素,在前端移出元素,上面說到我們可以利用 push 方法在陣列的末尾新增元素,那麼什麼方法在陣列的前端去移出元素呢?答案就是 shift() 方法。

佇列佇列

  • shift:刪除陣列的第一個元素,返回刪除的元素,使陣列的 length-1
可以看出它與pop()方法剛好相反
var arr = ['A', 'B', 'C'];arr.push('D');console.log(arr); //['A', 'B', 'C', 'D']var rem = arr.shift();console.log(arr);//['B', 'C', 'D']console.log(rem); // 'A'

我們可以看到上面我們是在末尾新增元素,前端刪除元素,但是我們可以不可以在前端新增元素,在末尾刪除元素呢?也就是說我們能不能反向模擬「佇列」。

Javascript 中為我們提供了一個方法然後我們配合pop()方法我們就可以實現反向的模擬。那就是 unshift()。

佇列2佇列2

  • unshift():在陣列的開頭新增任意個數的元素
var arr = ['A', 'B', 'C'];arr.unshift('D');console.log(arr); //[ 'D', 'A', 'B', 'C']var rem = arr.pop();console.log(arr);//['D', 'A', 'B']console.log(rem); // 'C'

總結

「陣列」在 Javascript 中是最為常見的引用型別的資料結構,其重要性是不言而喻的,因此「陣列」也擁有比較多的方法,如果一個篇幅寫下來會非常非常的長,這樣不僅不利於閱讀而且也非常考驗讀者對耐性,細水長流,所以我們分兩篇文章去介紹,如果你對文章感興趣,可以持續關注,如果喜歡呢,你也可以轉發,點贊,對作者也是一種支援!