常用的內建函式。
不改變原本陣列的方法
Array.some(function)
是否有一個元素符合函式的內容
1 | const array = [2, 4, 5, 7, 10]; |
Array.every(function)
是否所有元素皆符合函式的內容
1 | const array = [2, 4, 5, 7, 10]; |
Array.concat(array)
把兩個陣列合併起來後回傳。
1 | const arr1 = [1, 2, 3] |
Array.join(separator)
在每個元素之間插入 separator,結合成一個字串回傳。
1 | const str = 'AbCdEFGhijkLMN' |
Array.slice(start, end)
=> 切出陣列的某個部分。根據指定的起始與終點索引值(不包含 end)。
小技巧:
- 不指定 end 的話會自動算到最後一個元素
- 輸入負數代表「從後面數來第 n 個字」
1 | const arr = [1, 2, 3, 4, 5] |
Array.reduce(function, accumulator)
回傳陣列總和加上 accumulator 的值
補充:每一圈的 accumulator 值 = 上一圈的回傳值
1 | const arr = [1, 2, 3] |
小技巧:把 accumulator 的值設為 0(不設值也可以,但不建議這樣做),等於算出「陣列總和」
(沒有指定 accumulator 時,function 會把陣列的第一個元素當作累加器,並且忽略第一個元素,所以才會變成陣列總和)
1 | const arr = [1, 2, 3] |
乘法也是一樣的概念:
1 | const arr = [1, 2, 3] |
Array.find(function)
回傳第一個在 function 中回傳 true 的元素
1 | const arr = [1, 2, 3, 5, 10, 7] |
Array.some(function)
只要有一個元素通過 function 檢查就回傳 true,否則回傳 false
1 | const arr = [1, 2, 3, 5, 10, 7] |
Array.findIndex(function)
回傳第一個在 function 中回傳 true 的元素的索引值
1 | const arr = [1, 2, 3, 5, 10, 7] |
Array.includes(value)
判斷 value 是否包含在 Array 裡面,是就回傳 true,不是就回傳 false
1 | const arr = [1, 2, 3] |
Array.forEach(function)
在 function 中對每個元素做一段處理。
注意:這個方法不會有回傳值,所以當成是 for 迴圈的語法糖就好了
1 | const arr = [1, 2, 3] |
Array.map(function)
在 function 中對每個元素做一段處理,再利用該 function 的回傳值來建立一個新陣列。
1 | const arr = [1, 2, 3] |
小技巧:轉換資料型態時很適合用 map
1 | const arr =['1', '2', '3'] |
後來發現其實還有更簡單的做法:
1 | const arr =['1', '2', '3'] |
如果你想用「命名函式」來當作要傳入的 function 也可以:
1 | var arr = [1, 2, 3, 4] |
Array.filter(function)
=> 在 function 中對每個元素做條件判斷,根據該 function 的回傳值來建立一個新陣列。
true 會留下,false 會被遺棄(只留下奇數):
1 | const arr = [1, 2, 3] |
Array 方法串燒
如果回傳值是一個 Array,就可以一直使用 Array 的方法來串接下去。
用 map()
來做串燒:
1 | var arr = [1, 2, 3] |
你要混搭 map()
,filter()
也可以,但請務必確認前一個的回傳值是 Array。
會改變原本陣列的方法
再次強調,以下方法都會改變原本的陣列!
Array.reverse()
反轉陣列
要注意回傳值也是一個反轉後的陣列:
1 | const array1 = [1, 2, 3] |
Array.fill(value, start, end)
以某個值填滿陣列
要注意回傳值也是一個填滿後的陣列:
1 | const array1 = [1, 2, 3, 4] |
小技巧:
- 不指定 end 的話會自動算到最後一個元素
- 輸入負數代表「從後面數來第 n 個字」
1 | const array1 = [1, 2, 3, 4] |
Array.splice(start, delete, add)
插入或刪除元素
1 | const arr = [1, 2, 3, 4, 5] |
意思是:「從第 1
個索引位置,刪除一個元素,新增 Yo
、DJ
這兩個元素」
Array.sort(a, b)
對元素做排序
預設的排序方式
預設是根據「Unicode」的號碼來做排序(由小排到大),但我覺得這樣記也蠻方便的:
- 按照第一個「英文」字母排序(小寫的 Unicode 比大寫大)
- 按照第一個「數字」排序
1 | const arr = ['gGsdkfi', 'COKAOS', 'aAdjaod', 'Dkapd', 'Bkoad'] |
1 | const arr = [24, 13, 66, 45, 86, 27, 55] |
自定義排序方式
根據 return
值來決定排序方式,詳細規則可以參考 MDN,這裡只寫比較方便的記法:
假設初始的排序是 a => b
return 正數
代表 a b 交換位置return 負數
代表 a b 不交換位置
所以如果要由小排到大:
1 | const arr = [24, 13, 66, 45, 86, 27, 55] |
如果要由大排到小:
1 | const arr = [24, 13, 66, 45, 86, 27, 55] |
更簡潔的寫法:
1 | const arr = [24, 13, 66, 45, 86, 27, 55] |
解釋一下,如果 a-b
得到 正數
,代表 a 比 b 大
的時候交換位置。可以想成是「碰到大的就交換位置」,所以小的都會被排到後面,最後得到「由小到大」的排序。
1 | const arr = [24, 13, 66, 45, 86, 27, 55] |
解釋一下,如果 b-a
得到 正數
,代表 a 比 b 小
的時候交換位置。可以想成是「碰到小的就交換位置」,所以大的都會被排到後面,最後得到「由小到大」的排序。
Array.push(element1, [element2, [element3, ...]])
新增元素到陣列結尾
補充:回傳值為新的陣列長度
1 | const arr = [1, 2] |
Array.pop()
移除陣列的最後一個元素
補充:回傳值為被移除的元素
1 | const arr = [1, 2, 3, 4] |
Array.unshift(element1, [element2, [element3, ...]])
新增元素到陣列開頭
補充:回傳值為新的陣列長度
1 | const arr = [3, 4] |
Array.shift()
移除陣列的第一個元素
補充:回傳值為被移除的元素
1 | const arr = [1, 2, 3, 4] |