JavaScript 學習筆記 - 陣列操作
Intro
在寫 JavaScript 時,很常會需要去操作陣列,為了加深自己對陣列操作方法的印象而整理了這一篇筆記。
操作陣列的目的
為了更好地分類內容,我們會把性質相近的元素放在同一個陣列,然而時常又需要對這個陣列做查找、提取、新增、刪除、或其他操作。JavaScript 內建有非常多操作陣列的方法(Methods),不過常用的也只有幾種而已。
陣列具有兩個重要的屬性: length
與 index
,透過這兩個屬性,我們得以直接接觸到目標內容,就不需要迭代整個陣列。
操作陣列的方法
方法 | 描述 |
---|---|
forEach | 對每一個元素執行傳入的 callback |
map | return 一個新陣列,每一個元素為執行傳入的 callback 後的結果 |
filter | return 一個在 callback 中返回 true 的元素的新陣列 |
every | 如果陣列每一項元素都在 callback 中返回 true,則返回 true |
some | 如果陣列至少有一項元素在 callback 中返回 true,則返回 true |
reduce | 透過 callback 對陣列中每個元素做運算,並 return 一個單一的值 |
concat | 合併兩個陣列,並 return 新陣列 |
copyWithin | 複製陣列中某些元素,並取代陣列中指定 index 的元素 |
fill | 將陣列中的元素,替換為傳入的值 |
keys | return 一個新陣列,每一個元素是原陣列中每個元素的 index 值 |
find | 將陣列中每一個元素帶入 callback 判斷,並回傳第一個符合條件的元素 |
findIndex | 將陣列中每一個元素帶入 callback 判斷,並回傳第一個符合條件的元素的 index |
indexOf | 在陣列中由前往後查找目標元素的 index |
lastIndexOf | 在陣列中由後往前查找目標元素的 index |
join | 將陣列內容合併成一個字串 |
toString | return 一個字串,內容是以逗號分隔的陣列元素 |
shift | 移除並返回陣列的第一個元素 |
pop | 移除並返回陣列的最後一個元素 |
unshift | 在陣列的開頭新增傳入的元素 |
push | 在陣列的最後新增傳入的元素 |
reverse | 反轉陣列元素的排列順序 |
sort | 排序陣列的元素 |
slice | return 一個新陣列,內容為指定 index 及長度的元素 |
splice | 可新增或移除指定 index 的元素 |
isArray | 判斷一個物件是否為陣列,return true / false |
from | 將物件依照 callback 轉換為陣列 |
includes | 判斷陣列中是否含有某個元素,return true / false |
常用的方法
僅管操作陣列的方法有這麼多種,其實平常也不會全部都用到。以下整理了幾個我本身較常使用的方法。
forEach
map
當想要對一個陣列中每個元素做操作,這兩種方法就很好用。 若只是想對每個元素進行操作,就用 forEach
(類似 for
迴圈,不過寫法更簡潔);若操作完後要直接回傳一個陣列,就用 map
。
find
filter
every
some
在實現篩選功能的時候,這幾個方法就很適合。
若需要較複雜的篩選條件,就用 filter
遍歷整個陣列,並直接返回一個新陣列;而 every
與 some
可以拿來做比較簡單的篩選,只需判斷 true
/ false。
sort
需要對陣列做排序的時候使用。若要做大小排序,只需代入下列匿名函式:
myArray.sort((a, b) => a - b);
當然還可以做更複雜的排序。
reduce
有點類似 forEach
與 map
的用法,但更適合在要對整個陣列運算出一個單一結果時使用。
find
findIndex
能夠用抽象的描述找到符合條件元素的 index。通常接著會搭配使用其他的方法,像是取出該元素或複製、刪除等等。
indexOf
lastIndexOf
如果已經知道目標元素的長相,這兩個方法能夠直接查詢 index
,方便你做接下來的操作。
splice
能夠很方便地在陣列中指定位置刪除/新增元素,有三個參數可以代入:
myArray.splice(index, howmany, items);
push
若只是需要將新元素插入到陣列的最後,直接使用 push
。
slice
從陣列中複製一段內容,並回傳一個新陣列。
const newArray = myArray.slice(start, end);
參數 | 描述 |
---|---|
start | 為正/負整數,指定在陣列中開始操作的位置。 |
end | 可選。提取片段的結尾位置,若有設定則提取到該位置的前一個元素,若不設定就會提取到最後。 |
reverse
join
這兩個方法有時候會搭配使用,當你想要把一個字串內的每個字元反轉過來的時候,先使用字串的操作方法 split
將其變成陣列,再做 reverse
反轉每個元素,最後用 join
再讓他變成一個字串。