JS 筆記 | Array 操作篇

更新於 發佈於 閱讀時間約 11 分鐘

最近開始面試兼刷 leetcode,除了深感演算法與資料結構之重要,對於自己熟悉的程式語言的基本操作同樣也要熟稔於心,對,我就是在說你 JavaScript。

JavaScript 中使用的資料很常以陣列 (array) 或物件 (object) 或兩者一同出現的方式現身,所以陣列操作、物件操作就很重要。因為最近遇到比較多陣列的題目,所以來寫個陣列的操作筆記。

在一切開始前,先來創個陣列吧!

let numbers = [1, 2, 3, 4, 5, 6, 7, 8]



新增

  1. push,往陣列後加元素:來把 9 和 10 加上去吧!
numbers.push(9, 10)
console.log(numbers) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  1. unshift,往陣列前方加元素:來把 -1 和 0 加上去吧!
numbers.unshift(-1, 0)
console.log(numbers) // [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8]
  1. [],直接指定元素添加或更改位置:來把 6 變成 six 吧!
numbers[5] = 'six'
console.log(numbers) // [1, 2, 3, 4, 5, 'six', 7, 8]



刪除

  1. pop,刪除陣列後方一個元素並回傳刪掉的值:來把 8 刪掉吧!
const removeNum = numbers.pop()
console.log(removeNum) // 8
console.log(numbers) // [1, 2, 3, 4, 5, 6, 7]
  1. shift,刪除陣列前方一個元素並回傳刪掉的值:來把 1 刪掉吧!
const removeNum = numbers.shift()
console.log(removeNum) // 1
console.log(numbers) // [2, 3, 4, 5, 6, 7, 8]
  1. delete,刪除陣列指定位置元素,但不影響陣列長度:來把 6 刪掉吧!
delete numbers[5]
console.log(numbers) // [1, 2, 3, 4, 5, <empty>, 7, 8]



裁切

  1. splice(start, delete, insert),對原陣列直接做裁切並傳回裁切的部分。接受三個參數,第一個是要刪除或插入的索引位置;第二個是刪除的元素數,0是不刪除只插入,不填是刪除索引位置後所有元素;第三個是要插入的值。
    來把 6 和 7 刪掉變成 six 和 seven 吧!
const spliceValue = numbers.splice(5, 2, 'six', 'seven')
console.log(spliceValue) //[6, 7]
console.log(numbers) // [1, 2, 3, 4, 5, 'six', 'seven', 8]
  1. slice(start, end),不修改原陣列,而是會回傳新陣列 (原陣列中的一部分)。接受兩個參數,第一個是開始的位置;第二個是結束的位置,不代入參數就會提取到最後一筆資料,代入負數表示提取到倒數第幾個資料;都不帶參數會複製一個完整陣列。
    我們來把 3, 4, 5 取出來吧!
const newNumbers = numbers.slice(2, 5)
console.log(newNumbers) // [3, 4, 5]
  1. copyWithin(index, start, end),會修改原陣列的操作方式。語法內容是把 start 到 end 位置中的內容複製下來,然後從 index 的位置貼上覆蓋原本的內容。
    我們來用 6, 7, 8 蓋掉 2, 3, 4 吧!
numbers.copyWithin(1, 5, 8)
console.log(newNumbers) // [1, 6, 7, 8, 5, 6, 7, 8]



排序

  1. sort,顧名思義就是排序,會操作原陣列。參數可以接受自己寫的函式,也建議自己簡短寫一個函式,因為不帶參數的 sort 表現有點一言難盡...。
// 先創個混亂排序陣列
let newNumbers = [10, 5, 8, 2, 4, 1, 0]

// 單純用 sort() 不帶參數
newNumbers.sort()
console.log(newNumbers) //[0, 1, 10, 2, 4, 5, 8]

// 讓我們寫個函式代入參數
const Sorting = (a, b)=>{
if(a > b){
return 1
}else if(a < b){
return -1
}else{
return 0
}
}
newNumbers.sort(Sorting)
console.log(newNumbers) //[0, 1, 2, 4, 5, 8, 10]
  1. reverse,將陣列倒轉。
numbers.reverse()
console.log(numbers) // [8, 7, 6, 5, 4, 3, 2, 1]



篩選與搜尋

  1. filter,會回傳一個符合條件的新陣列。接受一個 callback 函式做為參數,該函式又接受三個參數:item, index, array。
    – item:正在被處理的元素
    – index:當前元素的索引位置
    – array:正在遍歷的陣列
    現在,來把 >5的數字取出來吧!
const filterNum = numbers.filter((item)=>{
return item > 5
})
console.log(filterNum) // [6, 7, 8]
  1. find,跟filter類似,但返回的是符合後方條件的第一個值。現在代入跟上面filter一樣的條件:
const findNum = numbers.find((item)=>{
return item > 5
})
console.log(findNum) // 6
  1. indexOf,查詢某元素的陣列索引位置。帶兩個參數,第一個是查尋的元素,第二個是要開始查詢的位置。現在來找找 6 的索引位置吧!
const index = numbers.indexOf(6)
console.log(index) // 5
  1. includes,查詢陣列中是否帶有某元素。所帶參數跟indexOf一樣。
console.log(numbers.includes(6)) // true



迭代

  1. forEach,可以看做是陣列的迴圈,不會修改原陣列也不會回傳任何值,就僅僅是依開發者想要對陣列中的元素做什麼操作。
    現在,來把數字都乘以 2 並放進新陣列中。
let doubleNumbers = []

numbers.forEach((number)=>{
let newNum = number * 2
return doubleNumbers.push(newNum)
})

console.log(doubleNumbers) // [2, 4, 6, 8, 10, 12, 14, 16]
  1. map,跟forEach不一樣,它會回傳一個新陣列。上述的內容改成map會變這樣:
const doubleNumbers = numbers.map((number)=>{
return number * 2
})

console.log(doubleNumbers) // [2, 4, 6, 8, 10, 12, 14, 16]
  1. reduce,是陣列計算的一大幫手。它接受兩個參數,一個是 callback function,一個是預設值。
    – callback function:
    – accumulator:目前計算後的值。
    – currentValue:正在處理的元素。
    – currentIndex:當前元素的索引位置。
    – array:當前操作的陣列。
    – initialValue:預設值,不提供會默認第一個元素的值為預設值。
    現在我們來累加 numbers 吧!
const sum = numbers.reduce((x, y)=>{
return x + y
})

console.log(sum) // 36
  1. every,用來檢查陣列中的元素是否都滿足特定條件,如果只想要部分滿足可以改成some。我們來試試條件代入 >6 吧!
console.log(numbers.every(number => number > 6)) // false,不是每個數字都大於6
console.log(numbers.some(number => number > 6)) // true,有一些數字大於6



刪除重複

先來建立一個有重複數字的陣列吧!

let numbers = [1, 2, 3, 4, 4, 4, 5, 6, 7, 8, 8, 8]
  1. filter,對,filter可以做到刪除重複,但因為filter是返回一個新陣列,在實務上運作會比下面的set方法慢。
const newNumbers = numbers.filter((item, index)=>{
return numbers.indexOf(item) === index
})

console.log(newNumbers) // [1, 2, 3, 4, 5, 6, 7, 8]
  1. set,快速解決重複的方法,因為對原陣列直接執行操作不產生新陣列,速度通常比filter快,推推!
numbers = [...new Set(numbers)]

console.log(numbers) // [1, 2, 3, 4, 5, 6, 7, 8]



合併

  1. concat,用來合併複數陣列。
let secondNumbers = [9, 10, 11]

let newNumbers = numbers.concat(secondNumbers)

console.log(newNumbers) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]



陣列轉字串

  1. join,裡面帶分隔符,不指定會以逗號隔開。現在來試試吧!
let string = numbers.join()
console.log(string) // 1,2,3,4,5,6,7,8

let string = numbers.join('')
console.log(string) // 12345678

let string = numbers.join(' ') // 帶空格
console.log(string) // 1 2 3 4 5 6 7 8



參考資源

  1. 實用 Array 陣列操作大全
  2. JS Array 刪除重複元素的三種方式
  3. JavaScript 大全 (第七版) / David Flanagan / 歐萊禮出版
留言
avatar-img
留言分享你的想法!
avatar-img
Jeremy Ho的沙龍
19會員
37內容數
這個專題用來存放我在學習網頁開發時的心得及知識。
Jeremy Ho的沙龍的其他內容
2023/11/17
2023/11/17
2023/11/16
TypeScript 基礎語法
Thumbnail
2023/11/16
TypeScript 基礎語法
Thumbnail
2023/11/13
JavaScript callback, promise, async-await
Thumbnail
2023/11/13
JavaScript callback, promise, async-await
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
陣列可以說是最常見的資料結構,LeetCode 裡的題目有過半都和 Array 有關,因此也通常是解題新手的第一站。在第一篇專文,我們就從它的操作方法講起。
Thumbnail
陣列可以說是最常見的資料結構,LeetCode 裡的題目有過半都和 Array 有關,因此也通常是解題新手的第一站。在第一篇專文,我們就從它的操作方法講起。
Thumbnail
JavaScript Array 基本操作筆記
Thumbnail
JavaScript Array 基本操作筆記
Thumbnail
題目會給定我們一個陣列和參數k,要求我們將陣列右旋k次,然後輸出內容。 例如[1,2,3,4,5] 右旋 2次,輸出就是[4,5,1,2,3]
Thumbnail
題目會給定我們一個陣列和參數k,要求我們將陣列右旋k次,然後輸出內容。 例如[1,2,3,4,5] 右旋 2次,輸出就是[4,5,1,2,3]
Thumbnail
題目:給定一個由 1 和 0 組成的數組,將等效的二進位值轉換為整數。 例如:[0, 0, 0, 1] 被視為 0001,即 1 的二進位表示法。
Thumbnail
題目:給定一個由 1 和 0 組成的數組,將等效的二進位值轉換為整數。 例如:[0, 0, 0, 1] 被視為 0001,即 1 的二進位表示法。
Thumbnail
題目:你的團隊正在開發一個新的高級文本編輯器,你的任務是實現行號功能。請編寫一個函數,該函數接受一個字符串列表作為輸入,並返回每行字符串前面附帶正確的行號。行號從 1 開始計數。格式為 n: 字符串。請注意冒號和空格之間的間隔。
Thumbnail
題目:你的團隊正在開發一個新的高級文本編輯器,你的任務是實現行號功能。請編寫一個函數,該函數接受一個字符串列表作為輸入,並返回每行字符串前面附帶正確的行號。行號從 1 開始計數。格式為 n: 字符串。請注意冒號和空格之間的間隔。
Thumbnail
題目:在此 kata 中,您將創建一個包含列表並返回具有相反順序的列表的函數。範例(輸入->輸出) * [1, 2, 3, 4] -> [4, 3, 2, 1] * [9, 2, 0, 7] -> [7, 0, 2, 9]
Thumbnail
題目:在此 kata 中,您將創建一個包含列表並返回具有相反順序的列表的函數。範例(輸入->輸出) * [1, 2, 3, 4] -> [4, 3, 2, 1] * [9, 2, 0, 7] -> [7, 0, 2, 9]
Thumbnail
這題就是經典的考排序驗算法, 不管在教科書、上機考、面試白板題都是一個很基本又滿熱門的題目。 題目會給定一個輸入陣列,要求我們實作一個排序演算法,把陣列元素從小到大排好。
Thumbnail
這題就是經典的考排序驗算法, 不管在教科書、上機考、面試白板題都是一個很基本又滿熱門的題目。 題目會給定一個輸入陣列,要求我們實作一個排序演算法,把陣列元素從小到大排好。
Thumbnail
在 C# 中,List 是一個常見且實用的集合類型,可以儲存一組元素並進行各種操作。本篇教學將帶你深入了解如何操作 List 以及進行降冪排序。我們將使用一系列範例程式碼來說明這些概念。
Thumbnail
在 C# 中,List 是一個常見且實用的集合類型,可以儲存一組元素並進行各種操作。本篇教學將帶你深入了解如何操作 List 以及進行降冪排序。我們將使用一系列範例程式碼來說明這些概念。
Thumbnail
C# 陣列 – (C#教學) – Array為程式設計中最基本元素之一. 陣列就是用一個variable記下多個同類的值(記憶體中的位置), 以供日後所調用. 相關頁面: C# List – 學會List的5種基本應用方法 – 初始化, 加入值, 更新值, 刪除值, foreach迴圈
Thumbnail
C# 陣列 – (C#教學) – Array為程式設計中最基本元素之一. 陣列就是用一個variable記下多個同類的值(記憶體中的位置), 以供日後所調用. 相關頁面: C# List – 學會List的5種基本應用方法 – 初始化, 加入值, 更新值, 刪除值, foreach迴圈
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News