2023-11-30|閱讀時間 ‧ 約 0 分鐘

【專論】用 10 個 methods 解析陣列的 CRUD 操作


★ 付費 Premium 專享 ★


↑看個小廣告,支持好內容↑



陣列可以說是最常見的資料結構,LeetCode 裡的題目有過半都和 Array 有關,因此也通常是解題新手的第一站。在第一篇專文,我們就從它的操作方法講起。


❶ 新增:unshift、push

兩者都是把東西放進陣列,只不過一個從頭放、一個則是從尾巴:

// arr=[1,2,3]

arr.unshift(4,5) // [4,5,1,2,3]
arr.push(4,5) // [1,2,3,4,5]


通常來說 push 會比較廣用,原因是陣列的每項資料都有固定的儲存位置push 只要在末端加開一個空位,但 unshift 卻需要把每一項都向後搬移,不是很經濟的做法。


❷ 刪除:shift、pop

同上,一個從頭刪 O(n)、一個則從尾巴 O(1)

// arr=[1,2,3,4]

arr.shift() // [2,3,4]
arr.pop() // [1,2,3]


上述四項操作都會直接改變陣列,若你還對棒球比賽有印象,這張圖你應該不陌生:

後進者先出 (LIFO, Last-In-First-Out) VS 先進者先出 (FIFO, First-In-First-Out)

Stack 的操作都是從陣列的末端,我們可用 push、pop 來實現;而 Queue 則是尾進頭出,對應到的方法是 push 和 shift。


❸ 排序:sort

sort 也是原地變化的操作,預設的排序方式是根據字元 unicode

// arr=[1,75,8,324,100]

arr.sort() // [1,100,324,75,8]
arr.sort((a,b)=>a-b) // [1,8,75,100,324]
arr.sort((a,b)=>b-a) // [324,100,75,8,1]


尋找與篩選:indexOf、filter

indexOf 會輸出第一個符合項目的位置;filter 則是回傳滿足條件者的陣列

// arr=[1,75,8,324,100]

arr.indexOf(8) // 2
arr.indexOf(4) // -1 (沒有找到)
arr.filter(x=>x>80) // [324,100]
arr.filter(x=>x<=0) // [] (沒有找到)


新增、刪除、查詢甚至排列都有了,最後來玩點運算處理吧!


❺ 運算:join、map、reduce

首先是文字轉換,陣列可以透過 join 將各項連接成文字,反之文字也可藉由 split 分割成一組陣列。

// arr=[1,0,1,1,0,0,1]

arr.join("") // "1011001"
arr.join("#") // "1#0#1#1#0#0#1" (以#作為連接符)


reduce 我們教過了,公式還記得嗎?

付費訂閱
分享至
成為作者繼續創作的動力吧!
從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

LeetCode King 的其他內容

你可能也想看

發表回應

成為會員 後即可發表留言
© 2024 vocus All rights reserved.