JavaScript 陣列方法速查表
你最常用的 JavaScript 陣列方法,以及各自回傳什麼,還有關鍵的一點——它是否修改原陣列還是回傳一個新陣列。把這一欄搞對能防止一整類 bug:map 和 filter 是安全的,因為它們不動原陣列,而 sort、reverse、splice 會就地改變它。
更新 2026-07-06
| 方法 | 作用 | 回傳 | 修改 |
|---|---|---|---|
| map() | 轉換每個元素 | 新陣列 | 否 |
| filter() | 保留通過測試的元素 | 新陣列 | 否 |
| reduce() | 把陣列歸併為單一值 | 任意值 | 否 |
| forEach() | 對每個元素執行一個函式 | undefined | 否 |
| find() | 第一個通過測試的元素 | 元素 / undefined | 否 |
| findIndex() | 第一個相符的索引 | 索引 / -1 | 否 |
| some() | 至少一個通過則為 true | 布林值 | 否 |
| every() | 全部通過則為 true | 布林值 | 否 |
| includes() | 某個值是否存在 | 布林值 | 否 |
| indexOf() | 某個值的索引 | 索引 / -1 | 否 |
| slice() | 複製陣列的一部分 | 新陣列 | 否 |
| concat() | 把多個陣列合併為一個新陣列 | 新陣列 | 否 |
| join() | 把元素合併成一個字串 | 字串 | 否 |
| flat() | 展平巢狀陣列 | 新陣列 | 否 |
| flatMap() | map() 後展平一層 | 新陣列 | 否 |
| at() | 依索引取元素(支援負數) | 元素 | 否 |
| push() | 在結尾加入一個或多個項 | 新長度 | 是 |
| pop() | 刪除最後一項 | 被刪除的項 | 是 |
| shift() | 刪除第一項 | 被刪除的項 | 是 |
| unshift() | 在開頭加入項 | 新長度 | 是 |
| splice() | 在任意索引加入/刪除項 | 被刪除的項 | 是 |
| sort() | 就地排序陣列 | 該陣列 | 是 |
| reverse() | 就地反轉陣列 | 該陣列 | 是 |
| fill() | 用一個靜態值填滿 | 該陣列 | 是 |
| Array.from() | 從可迭代物件建立陣列 | 新陣列 | 否 |
| Array.isArray() | 檢查一個值是否是陣列 | 布林值 | 否 |
提示:當你需要一個排序後的副本而不動原陣列時,先展開 —— [...arr].sort()。現代 JavaScript 還新增了回傳新陣列的非修改版(toSorted、toReversed、toSpliced、with)。