[JS] 陣列方法筆記起來
前言
學習Javascript到應用時,最常使用的就是陣列方法來處理資料,因此多知道一個方法但不需要死背用法來的更重要。這篇也會持續更新學到的方法。
另外整理這篇的契機是在學習過程中,看了偷米騎巴哥的影片和整理圖,十分喜歡,也讓觀念更加清晰。
出處連結在此
另外也很喜歡OxxoStudio這個整理過後的大全分類,借鑒了OxxoStudio的分類整理以自己理解的觀念。
還有其他實用的方法
- Cheatsheet for Array Methods - Javascript 陣列方法大全
- JavaScript 陣列處理方法 [filter(), find(), forEach(), map(), every(), some(), reduce()]
陣列方法小筆記
1. 會改變原本陣列的內容
> 陣列增減,複製取代
push() :加入到最後 — unshift() :加入到最前
pop() :把最後一個去除 — shift() :把最前一個去除
splice()
splice()中包含三個參數:
參數1(必填):從第幾個開始刪除或新增
參數2(選填):要刪掉幾個,0或負值則不刪除,不填時 參數1 後所有項目都刪除。
參數3(選填):新增的項目,可以是好幾個值
1 | let ary = [1, 2, 3, 4, 5]; |
copyWithin()
有點像是複製貼上取代的概念,貼上會取代掉原本位置的元素
參數1(必填):從第幾個開始貼上取代
參數2(選填 預設0):從第幾個開始複製
參數3(選填 預設陣列長度):複製到第幾個前(不包含這一個)
1 | let ary = [1, 2, 3, 4, 5]; |
fill()
把陣列中所有元素,換成指定的值
參數1(必填):指定的值
參數2(選填 預設0 全部置換):從第幾個開始換
參數3(選填 預設陣列長度):換到第幾個前(不包含這一個)
1 | let ary = [1, 2, 3, 4, 5]; |
> 陣列排序
reverse() :反轉陣列排序
sort() :
會將元素轉換成 字串 來排序,預設排序為unicode 從 a 排到 z , 從 小 排到 大,若有十位數以上數字則會產生排序問題,因此需要用以下方法來解決。
1 | let ary = [100, 1, 4, 50]; |
2. 回傳陣列元素資訊或索引值
(取得陣列而不會改變原始陣列)
> 回傳陣列元素資訊
.length : 回傳陣列的長度(元素的數量)
> 回傳陣列索引值
indexOf()
由左到右判斷是否有 參數1 的值,如果有回傳這個值的索引值,如果沒有回傳 -1
參數1(必填):要判斷的值
參數2(選填 預設0):從第幾個開始判斷
lastIndexOf()
由右到左判斷是否有 參數1 的值,如果有回傳這個值的索引值,如果沒有回傳 -1
參數1(必填):要判斷的值
參數2(選填 預設為最後一個):從第幾個開始判斷
1 | let ary = [1, 2, 3, 4, 5]; |
findIndex()
會將陣列中的 每一個 元素帶入函式判斷,並會回傳 第一個 符合判斷條件元素的索引值,如果沒有元素符合則會回傳 -1
> 回傳陣列元素值
find()
會將陣列中的 每一個 元素帶入函式判斷,並會回傳 第一個 符合判斷條件的元素,如果沒有元素符合則會回傳 undefined
1 | let ary = [1, 2, 3, 4, 5]; |
> 回傳一個新字串
join()
可帶入值取代原有陣列的逗號區隔,回傳成字串,未帶入則用逗號隔開
1 | let aryA = [1, 2, 3, 4, 5]; |
toString()
可以把整個陣列轉換成字串
1 | let ary = [1, 2, 3, 4, 5]; |
> 回傳一個新數值
reduce()
將陣列中每一個元素進行計算,結果再與下個元素計算,回傳計算結果。較常見於計算加總。
裡頭有一個函式 (必填) 和 一個初始計算數值 (選填)
函式中可帶入4個參數
參數1(必填):計算的值
參數2(必填):該元素的值
參數3(選填):元素的索引值
參數4(選填):原本的陣列
1 | let aryA = [1, 2, 3, 4, 5]; |
reduceRight()
和reduce類似,差別在計算方式是由右到左,加法不影響,減法則會有差別
1 | let aryA = [1, 2, 3, 4, 5]; |
> 回傳一個新陣列
filter()
會將陣列中的 每一個 元素帶入指定的函式內做判斷,並會回傳符合判斷條件的元素組成一個新陣列
1 | let aryA = [1, 2, 3, 4, 5]; |
slice()
與字串.slice()用法差不多,擷取某段回傳出新陣列
參數1(必填):從第幾個開始擷取
參數2(選填 預設為最後一個):擷取到第幾個前(不包含這一個)
1 | let aryA = [1, 2, 3, 4, 5]; |
concat() :將兩個陣列串接為一個陣列
…
ES6語法 擴展運算符… 有相同功能
1 | let aryA = [1, 2, 3, 4, 5]; |
展開運算符(spread operator)
…運用在陣列與物件
1 | let aryA = [1,2,3]; |
剩餘操作符(rest operator)
是解構的一種,意思就是把剩餘的東西放到一個array裏面賦值給它。
1 | let aryA = [1,2,3]; |
Array.of()
可以把數字、字串轉換成陣列
1 | let ary = Array.of(1, 2, 3, 'a', ['b']); |
Array.from()
可將(「類陣列物件」:具有length屬性和索引值) 或是(「可迭代的物件」:可利用迭代的方式取得本身的元素eg: Map和Set等) 轉換成陣列,有兩個參數
參數1(必填):「類陣列物件」或是「可迭代的物件」
參數2(選填):改變轉換陣列的函式
1 | let a = '12345'; |
「類陣列物件」:需具有length屬性和索引值
1 | let obj = { |
flat()
可以把多層陣列平面化,一個參數(選填 預設1)為平面化幾層,設定Infinity可以直接全面平面化,回傳成新陣列
1 | let aryA = [1, 2, [[3]], [[[4], 5]]]; |
flatMap()
map() + flat() 帶入函式後傳出的值再平面化
1 | let aryA = [1, 2, [[3]], [[[4], 5]]]; |
map()
與 forEach 非常類似,但是 map 會 return 一個值,並會產生一個新陣列
裡頭有一個函式 (必填) 和 一個callback函式裡的 this 參數 (選填)
函式中可帶入3個參數
參數1(必填):每個元素帶入的變數
參數2(選填):該元素的索引值
參數3(選填):原本的陣列
1 | let aryA = [1, 2, 3, 4, 5]; |
3. 針對每個元素處理,不用return
forEach()
會將陣列中的 每一個 元素帶入指定的函式內做運算,
裡頭有一個函式 (必填) 和 一個callback函式裡的 this 參數 (選填)
函式中可帶入3個參數
參數1(必填):每個元素帶入的變數
參數2(選填):該元素的索引值
參數3(選填):原本的陣列
forEach() 無法用 break 中斷,如果想要中斷執行的話要使用傳統的 for 迴圈。
1 | let ary = [1, 2, 3, 4, 5]; |
可更改原始陣列
1 | let ary = [1, 2, 3, 4, 5]; |
4. 判斷並回傳布林值
Array.isArray()
判斷一個物件是否為陣列,如果是就回傳 true,不然就回傳 false。
1 | let ary = [1, 2, 3, 4, 5]; |
every()
會將陣列中的 每一個 元素帶入指定的函式內做判斷,
全部符合條件回傳 true,其中一個元素條件不符合,便回傳false。
1 | let ary = [1, 2, 3, 4, 5]; |
some()
會將陣列中的 每一個 元素帶入指定的函式內做判斷,
其中一個元素符合條件回傳 true,全部不符合,便回傳false。
1 | let ary = [1, 2, 3, 4, 5]; |
includes()
判斷陣列中是否包含某個值,如果有包含就回傳 true,不然就回傳 false
參數1(必填):要判斷的值
參數2(選填):從第幾個開始判斷
1 | let ary = [1, 2, 3, 4, 5]; |
5. 其他
> 回傳陣列值
valueOf()
回傳原本陣列的值,但如果原本陣列有修改,那麼回傳後的陣列值也會跟著改變,類似傳參考的概念。
1 | let aryA = [1, 2, 3, 4, 5]; |
> 回傳一個的Array Iterator物件
keys()
回傳陣列中的每一個索引值 key 成為一個新的 Array Iterator 陣列迭代器物件
因為是 Array Iterator 物件,可以透過 Array.from, for…of來取得。
1 | let a = ['a','b','c','d','e']; |
延伸閱讀 for…of
values()
回傳陣列中的每一個元素值 成為一個新的 Array Iterator 陣列迭代器物件
1 | let a = ['a','b','c','d','e']; |
entries()
回傳陣列中的每一個索引值 key 與對應元素 成為一個新的 Array Iterator 陣列迭代器物件
fromEntries()
可把Array Iterator 陣列迭代器物件轉成物件Object
1 | let a = ['a','b','c','d','e']; |