Skip to content

JavaScript 學習筆記 - 陣列操作

Intro

在寫 JavaScript 時,很常會需要去操作陣列,為了加深自己對陣列操作方法的印象而整理了這一篇筆記。

操作陣列的目的

為了更好地分類內容,我們會把性質相近的元素放在同一個陣列,然而時常又需要對這個陣列做查找、提取、新增、刪除、或其他操作。JavaScript 內建有非常多操作陣列的方法(Methods),不過常用的也只有幾種而已。

陣列具有兩個重要的屬性: lengthindex,透過這兩個屬性,我們得以直接接觸到目標內容,就不需要迭代整個陣列。

操作陣列的方法

方法描述
forEach對每一個元素執行傳入的 callback
mapreturn 一個新陣列,每一個元素為執行傳入的 callback 後的結果
filterreturn 一個在 callback 中返回 true 的元素的新陣列
every如果陣列每一項元素都在 callback 中返回 true,則返回 true
some如果陣列至少有一項元素在 callback 中返回 true,則返回 true
reduce透過 callback 對陣列中每個元素做運算,並 return 一個單一的值
concat合併兩個陣列,並 return 新陣列
copyWithin複製陣列中某些元素,並取代陣列中指定 index 的元素
fill將陣列中的元素,替換為傳入的值
keysreturn 一個新陣列,每一個元素是原陣列中每個元素的 index 值
find將陣列中每一個元素帶入 callback 判斷,並回傳第一個符合條件的元素
findIndex將陣列中每一個元素帶入 callback 判斷,並回傳第一個符合條件的元素的 index
indexOf在陣列中由前往後查找目標元素的 index
lastIndexOf在陣列中由後往前查找目標元素的 index
join將陣列內容合併成一個字串
toStringreturn 一個字串,內容是以逗號分隔的陣列元素
shift移除並返回陣列的第一個元素
pop移除並返回陣列的最後一個元素
unshift在陣列的開頭新增傳入的元素
push在陣列的最後新增傳入的元素
reverse反轉陣列元素的排列順序
sort排序陣列的元素
slicereturn 一個新陣列,內容為指定 index 及長度的元素
splice可新增或移除指定 index 的元素
isArray判斷一個物件是否為陣列,return true / false
from將物件依照 callback 轉換為陣列
includes判斷陣列中是否含有某個元素,return true / false

常用的方法

僅管操作陣列的方法有這麼多種,其實平常也不會全部都用到。以下整理了幾個我本身較常使用的方法。

forEach map

當想要對一個陣列中每個元素做操作,這兩種方法就很好用。 若只是想對每個元素進行操作,就用 forEach(類似 for 迴圈,不過寫法更簡潔);若操作完後要直接回傳一個陣列,就用 map

find filter every some

在實現篩選功能的時候,這幾個方法就很適合。

若需要較複雜的篩選條件,就用 filter 遍歷整個陣列,並直接返回一個新陣列;而 everysome 可以拿來做比較簡單的篩選,只需判斷 true / false。

sort

需要對陣列做排序的時候使用。若要做大小排序,只需代入下列匿名函式:

js
myArray.sort((a, b) => a - b);

當然還可以做更複雜的排序。

reduce

有點類似 forEachmap 的用法,但更適合在要對整個陣列運算出一個單一結果時使用。

find findIndex

能夠用抽象的描述找到符合條件元素的 index。通常接著會搭配使用其他的方法,像是取出該元素或複製、刪除等等。

indexOf lastIndexOf

如果已經知道目標元素的長相,這兩個方法能夠直接查詢 index,方便你做接下來的操作。

splice

能夠很方便地在陣列中指定位置刪除/新增元素,有三個參數可以代入:

js
myArray.splice(index, howmany, items);

push

若只是需要將新元素插入到陣列的最後,直接使用 push

slice

從陣列中複製一段內容,並回傳一個新陣列。

js
const newArray = myArray.slice(start, end);
參數描述
start為正/負整數,指定在陣列中開始操作的位置。
end可選。提取片段的結尾位置,若有設定則提取到該位置的前一個元素,若不設定就會提取到最後。

reverse join

這兩個方法有時候會搭配使用,當你想要把一個字串內的每個字元反轉過來的時候,先使用字串的操作方法 split 將其變成陣列,再做 reverse 反轉每個元素,最後用 join 再讓他變成一個字串。