前言
這週與前端小夥伴們發起了 JavaScript 資料結構 (data structure) 讀書會,二話不說用微薄的薪資擠出了些孔方兄購入兩本工具書規劃一下學習計畫,這週從最基礎的陣列 (Array) 走起!
是哪兩本書我會放在最後給大家參考,也希望有想學習這方面的小夥伴每週跟著我的腳步一起成長八 ❤️
陣列 Array
在眾多的語言中,陣列是大家原生都有支援的類型,是最常見的負責存放一系列相同類別資料的方法。但在 JS 裡是可以在裡頭儲存不同類型的值。這部分我們就不探討了。
為什麼要用陣列
假設有一個需求,記錄下這星期每一天吃的熱量總數:
1 | var calorieMon = 3500; |
方法沒有不行但肯定不是最佳。以這種方式,如果只有一週自然只有 7 個變數,那要記錄半年呢?
這個時候就要慶幸有陣列來幫助我們更有效率解決:
1 | var calorieArr[0] = 3500; |
宣告和初始化
宣告的方式有幾種:
1 | var arr = new Array(); |
基本屬性
1 | // 陣列元素的數量 |
元素的添加和刪除
以下我們就使用這個範例來做一些教學八
1 | var arr = [0,1,2,3,4,5]; |
添加元素:
1 | var arr = [0,1,2,3,4,5]; |
刪除元素:
1 | var arr = [0,1,2,3,4,5]; |
在後面的章節裡,會藉由 push, pop 方法,模擬堆疊資料結構;而 shift 和 unshift 則模擬佇列資料結構。
到這邊為止,介紹了從頭尾去新增及刪除元素,那我們要怎麼從中間去操作呢?
讓我們接下去看到 splice 屬性,這也是我覺得很便利的方法!
1 | var arr = [0,1,2,3,4,5]; |
二維及多維陣列
二維用表格來解釋會相當容易理解,下方是一個 3x3 的表格也代表著一種二維陣列
A1 | A2 | A3 |
---|---|---|
A4 | A5 | A6 |
A7 | A8 | A9 |
A1的索引值:arr[0][0]
A2: arr[0][1]
A3: arr[0][2]…依此類推
幾維陣列的遍歷就要用幾層迴圈作。
陣列方法
方法 | 描述 |
---|---|
concat | 連接多個陣列,return 結果 |
every | 對陣列每一個元素運行函數,每一個元素都是 true,才會 return true |
filter | 對陣列每一個元素運行函數,集合 true 的元素 return 陣列 |
forEach | 對陣列每一個元素運行函數 |
join | 將所有元素串成一個字串 |
indexOf | return 第一個相等參數的索引值,無符合 return -1 |
lastIndexOf | return 最後一個相等參數的索引值,無符合 return -1 |
map | 對陣列每一個元素運行函數,return 每次函數所呼叫的結果所組成之陣列 |
reverse | 反轉陣列裡的元素 |
slice | 傳入索引值,return 索引範圍內的元素新陣列 |
some | 對陣列每一個元素運行函數,有任意 true ,return true |
sort | 按照 ASCII 值做排序,支援傳入指定排序函數做參數 |
toString | return 將陣列轉字串 |
valueOf | 和 toString 相似,return 將陣列轉字串 |
工具書
- JavaScript 資料結構及演算法實作 - Loiane Groner
- 演算法圖鑑 - 石田保輝、宮崎修一