JavaScript 中 Array 的解題技巧: Method 整理
在這篇文章中,我詳細整理了 JavaScript 中的 Array 方法,包括基本方法如 push、pop,以及過濾和查找特定元素的方法如 find 和 filter。我介紹了每個方法的功能和用法,並提供了實例代碼來展示如何在實際中應用這些 Array 方法,幫助讀者更有效地使用 JavaScript 來處理陣列數據。
之前寫過一篇 百日轉職前端工程師:第三週 JS 常用內建函式《DAY 9》 摘要內容如下:
前文內 String 的提到的內建方法:
- String.trim
- 將字串「前」「後」的指定元素刪除掉回傳一新字串,若是沒指定則預設為空白
- String.toLowerCase
- 將字串中所有英文大寫轉成小寫後回傳一新字串
- String.endsWith
- 判斷字串是否以指定字元做結尾,若是則回傳 true
- String.padEnd
- 將一字串不足指定長度的部分以指定值填入,若未指定值則預設填充空白
- String.slice
- 切下初始到結束位置的字串元素然後回傳成一個新的字串6
- String.substring 功能很類似
- String.split
- 找到字串中的某元素,然後將左右兩側分開回傳
- String.replace
- 用來將字串中的字取代為另一個字。
- String.charCodeAt()
- 轉換成字串的位置處字的 Unicode 編碼
- 延伸 String.charAt()
- 'apple'.charAt(0) // ‘a’
- 轉換成字串的位置處字的 Unicode 編碼
- String.repeat
' 5566 '.trim()
// '5566'
'APPLE'.toLowerCase()
// 'apple'
'My name is Paul'.endsWith(Paul)
// true
'012'.padEnd(10, '-')
// '012-------'
'Hello, I am fine. How about you?'.slice(7, 16)
// 'I am fine.'
'Hello'.split('')
// ['H', 'e', 'l', 'l', 'o']
'a123'.repeat(3)
// 'a123a123a123'
'Hello John ! Hello Peter!'.replace('Hello', 'Hi')
// 'Hi John ! Hello Peter!'
'Hello John ! Hello Peter!'.replace(/Hello/g, 'Hi')
// 'Hi John ! Hi Peter!'
'Apple'.charCodeAt(0) // 65
'apple'.charCodeAt(0) // 97
本篇進一步詳細整理 Array Prototype 中的方法 Method 有以下幾種
- Basic Array Method
- Filter/Find something
- Special Method
一、Basic Array Method
1. push()
- Array.prototype.push(elementN)
- 在原本的 Array 後面加上新值,回傳 Array 的長度
2. unshift()
- Array.prototype.unshift(elementN)
- 在原本的 Array 前面加上新值,回傳 Array 的長度
3. pop()
- Array.prototype.pop()
- 移除原本陣列最後面的第一個值,回傳被移除掉的那個值
4. shift()
- Array.prototype.shift()
- 移除原本陣列最前面的第一個值,回傳被移除掉的那個值
5. concat()
- Array.prototype.concat(arrayN)
- 兩個陣列合併在一起,並回傳新陣列
const character = ['A', 'B', 'C']
character.push('D')
// 3
character.unshift('D')
// 3
character.pop()
// 'C'
character.shift()
// 'A'
character.concat(['D'])
// ['A', 'B', 'C', 'D']
一、Filter/Find something
1. findIndex()
- Array.prototype.findIndex(item, index, array)
- 回傳第一個符合條件的位置 index,若都找不到則回傳 -1
- 與 indexOf 差別在於要寫條件式如
- array.findIndex(item => item === target)
- array.indexOf(target)
2. find()
- Array.prototype.find(item, index, array)
- 回傳一個值,且是第一個抓到條件為 true 的值
3. filter()
- Array.prototype.filter(item, index, array)
- 回傳包含「回傳條件為 true 的值」的一個陣列
4. forEach()
- Array.prototype.forEach(item, index, array)
- forEach 不會回傳任何東西,單純只執行原本陣列裡的事
5. map()
- Array.prototype.map(item, index, array)
- 將條件運算後重新組合回傳一個數量等於 array.length 的陣列
6. some()
- Array.prototype.some(item, index, array)
- 回傳一個 Boolean,只要部分符合就回傳 true 停止執行
7. every()
- Array.prototype.every(item, index, array)
- 回傳一個 Boolean,全部符合才回傳 true,部分符合回傳 false
const list = [
{ product: 'A', number: 10 },
{ product: 'B', number: 13 },
{ product: 'C', number: 14 },
{ product: 'D', number: 18 },
{ product: 'E', number: 19 },
{ product: 'F', number: 22 },
]
list.findIndex(item => item.number > 10)
// 1
list.find(item => item.number > 10)
// { product: 'B', number: 13 }
list.filter(item => item.number > 10)
// [{ product: 'B', number: 13 },{ product: 'C', number: 14 },{ product: 'D', number: 18 },{ product: 'E', number: 19 },{ product: 'F', number: 22 }]
list.forEach(item => item.number > 10)
// undefined
list.map(item => item.number > 10)
// [false, true, true, true, true, true]
list.some(item => item.number > 10)
// true
list.every(item => item.number > 10)
// false
三、Special Method
1. reduce()
- Array.prototype.reduce(accumulator, currentValue, currentIndex, array [, initialValue])
- 回傳運算結果的值,initialValue 可以設定初始值
2. sort()
- Array.prototype.sort(compareFunction)
- 若沒有 compareFunction,會先自動轉成字串,回傳一個根據 Unicode 排序 array.length 長度的 array
3. reverse()
- Array.prototype.reverse()
- 回傳反過來長度為 array.length 的陣列
4. slice()
- Array.prototype.slice(start, end)
- 回傳在 start(包含) 跟 end 之間的陣列
5. splice()
- Array.prototype.splice(start, deleteCount, item1, item2, …)
- 回傳被移掉的值放在陣列裡
6. indexOf()
- Array.prototype.indexOf(searchElement)
- 回傳找到第一個位置的 index,如果找不到會回傳 -1
- 延伸 lastIndexOf()
- 回傳找到最後一個位置的 index,如果找不到會回傳 -1
7. at()
- Array.prototype.at(searchElement)
- 負數從尾端開始 array[array.length-1] === arrat.at(-1)
8. join()
- Array.prototype.join(separator)
- 把所有陣列裡的值加上 separator,回傳一個字串
9. includes()
- Array.prototype.includes(searchElement, fromIndex)
- 看 searchElement 有沒有在 array 裡,回傳 Boolean
10. fill()
- Array.prototype.fill(value)
- 填充值進 array,很常用在設定預設值,如 const arr = Array(6).fill(0)
11. Array.from()
- Array.from()
- 將以下轉換成陣列
- 類似陣列的資料
- 可迭代(iterable)物件
const character = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
character.reduce((acc, val) => acc += val )
// 'ABCDEFG'
character.reverse()
// ['G', F', 'E', 'D', 'C', 'B', 'A']
character.slice(2,4)
// ['C', 'D']
character.splice(2,4)
// ['C', 'D', 'E', 'F']
character.indexOf('C')
// 2
character.at(-1)
// 'G'
character.join('-')
// 'A-B-C-D-E-F-G'
character.includes('C')
// true
const character2 = ['C', 'A', 'B', 'D', 'E', 'F', 'G']
character2.sort()
// ['A', 'B', 'C', 'D', 'E', 'F', 'G']
character.fill('X')
['X', 'X', 'X', 'X', 'X', 'X', 'X']
Array.from([1, 2, 3], x => x + x) // [2, 4, 6]
Array.from(new Map([[1, 2], [2, 4], [4, 8]])) // [[1, 2], [2, 4], [4, 8]]
Array.from({length: 4}, i => i) // [undefined,undefined,undefined,undefined]
Array.from({length: 4},(v, i) => i) // [0, 1, 2, 3]
參考資料: 前端工程師用 javaScript 學演算法系列陣列 Array