不會改變原始資料
<– 參數為值 –>
slice()
- array.slice([start[, end]])
- 跟展開運算子 […array]一樣常被用作淺拷貝
- 回傳一個新陣列物件,為原陣列選擇之 start 至 end(end index 元素不包含在回傳結果)的淺拷貝
- 可以不傳參數(start 預設 0,end 預設 array.length)
- 可單傳 start 參數或 start end 都傳
- 接受負數,slice(2, -1) 代表拷貝陣列中第三個元素至倒數第二個元素
|
|
concat()
- var newArray = oldArray.concat(value1[, value2[, …[, valueN]]])
- 合併兩個或多個陣列。回傳一個包含呼叫者陣列本身的值,作為代替的是回傳一個新陣列
- 跟展開運算子[…arr, …arr2] 一樣
|
|
join()
- array.join([separator])
- 回傳合併所有陣列元素的字串
- separator 為用來隔開陣列中每個元素的字串。如果必要的話,separator 會自動被轉成字串型態。如果未傳入此參數,陣列中的元素將預設用英文逗號(「, 」)隔開。如果 separator 是空字串,合併後,元素間不會有任何字元。
- 任何 undefined 或 null 的元素都會被視為空字串處理。
- 假如 arr.length 為 0,將回傳空字串。
|
|
flat() (IE 沒有支援)
- var newArray = arr.flat([depth]);
- 函式以遞迴方式將特定深度的子陣列重新串接成為一新的陣列
- 第一個參數為指定巢狀陣列展開的深度,預設為 1
- 當遭遇空元素時,flat()函式會自動清除陣列中空的元素
|
|
flatMap() (IE 沒有支援)
- var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) { // return element for new_array }[, thisArg])
- 幾乎等同 map().flat(),但比分別調用這兩個方法效能更好
|
|
<– 參數為 callback –>
map()
- var new_array = arr.map(function callback(currentValue[, index[, array]]) { // Return element for new_array }[, thisArg])
- 把元素丟到函式裡執行,並回傳一個新陣列
- callback 可以收三個參數(當前處理元素、當前處理元素 index、正在操作的陣列)
- 可以用作淺拷貝
|
|
filter()
- var newArray = array.filter(callback(element[, index[, array]])[, thisArg])
- 回傳通過該函式檢驗之元素所構成的新陣列
- callback 可以收三個參數(當前處理元素、當前處理元素 index、正在操作的陣列)
|
|
reduce()
- array.reduce(callback[accumulator, currentValue, currentIndex, array], initialValue)
- 迭代到的陣列元素,回傳 accumulator,accumulator 是累加處理結果(累加是邏輯的累加不一定是數值累加)
- callback 可以收四個參數(accumulator 累加器處理結果、當前處理元素、當前處理元素 index、正在操作的陣列)
- 若有傳入 initialValue,則由索引 0 之元素開始,若無則自索引 1 之元素開始
- 空陣列呼叫 reduce() 方法且沒有提供累加器初始值,將會發生錯誤
- 可以把陣列變成一個計算結果,結果可以是數字/物件各種形式
|
|
find()
- array.find(callback[, thisArg])
- 回傳第一個滿足所提供之測試函式的元素值
- 查找不到會回傳 undefined
- callback 可以收三個參數(當前處理函式、當前處理函式 index、正在操作的陣列)
|
|
findIndex() v.s. indexOf()
- array.findIndex(callback[, thisArg])
- 回傳第一個滿足所提供之測試函式的元素索引,若找不到會回傳-1
- callback 可以收三個參數(當前處理元素、當前處理元素 index、正在操作的陣列)
- indexOf(element, fromIndex) 也可以搜尋元素索引位置,但參數通常是給一個 primitives 值
- findIndex()期望參數為一個 callback,可以處理複雜邏輯
|
|
at()
- 功能類似 find(),array.at(index)等於 array[index]
- 回傳索引的元素,通常用來取最尾端的元素
- 允許正整數和負整數。負整數從數組中的最後一項開始倒數
- 找不到元素回傳 undefined
|
|
some()
- arr.some(callback[, thisArg])
- some() 測試陣列中是否至少有一個元素,符合該函式條件,回傳結果為 true false
- callback 可以收三個參數(當前處理元素、當前處理元素 index、正在操作的陣列)
|
|
every()
- arr.every(callback[, thisArg])
- every() 方法會測試陣列中的所有元素是否都通過函式條件,回傳結果為 true false
- callback 可以收三個參數(當前處理元素、當前處理元素 index、正在操作的陣列)
|
|
會改變原始資料
push()、pop()、shift()、unshift()可以參考JavaScript 基礎知識複習(2)
<– 參數為值 –>
splice()
- array.splice(start[, deleteCount[, item1[, item2[, …]]]])
- 回傳一個包含被刪除的元素陣列
- 如果只有一個元素被刪除,依舊是回傳包含一個元素的陣列。若沒有元素被刪除,則會回傳空陣列。
- 多數時候不在意回傳值而是修改後的陣列資料,可以用來取代陣列某個索引的元素,可以新增元素也可以刪除元素
- start 是改動點,若大於陣列長度,起始點為陣列長度。若為負,起始點為-1。複數絕對值大於陣列長度,則起始點為 0
- deleteCount 為刪除元素數量
- array.splice(-1) 等於 array.pop()
|
|
reverse()
- array.reverse()
- 回傳反轉後的陣列
|
|
<– 參數為 callback –>
sort()
- arr.sort([compareFunction])
- 對一個陣列的所有元素進行排序,並回傳此陣列。排序不一定是穩定的(stable)
- 由於依賴執行環境的實作,所以並不能保證排序的時間及空間複雜度
- 預設的排序順序是根據字串的 Unicode 編碼位置(code points)而定,可以用第一個參數 compareFunction(a, b)自定義比較邏輯
|
|
- 若 compareFunction(a, b) 的回傳值小於 0,則會把 a 排在小於 b 之索引的位置,即 a 排在 b 前面。
|
|
- 若 compareFunction(a, b) 的回傳值大於 0,則會把 b 排在小於 a 之索引的位置,即 b 排在 a 前面。
|
|
- 若 compareFunction(a, b) 回傳 0,則 a 與 b 皆不會改變彼此的順序,但會與其他全部的元素比較來排序。備註:ECMAscript 標準並不保證這個行為,因此不是所有瀏覽器(如 Mozilla 版本在 2003 以前)都遵守此行為。
- compareFunction(a, b) 在給予一組特定元素 a 及 b 為此函式之兩引數時必須總是回傳相同的值。若回傳值不一致,排序順序則為 undefined。
|
|
針對每個元素處理
- 原始資料可改可不改,看函式邏輯
- 可以只迭代 render 在畫面上,也可修改資料 e.g. 新增物件屬性等
forEach()
- array.forEach(callback(currentValue [, index [, array]])[, thisArg])
- 對每個陣列內的元素執行一次函式的內容,不會回傳執行結果,但可以修改原來的陣列
- callback 可以收三個參數(當前處理元素、當前處理元素 index、正在操作的陣列)
- forEach 無法從迴圈跳出,會執行完畢
|
|
- forEach 用在 set 跟 map
|
|
- 增加物件屬性
|
|
產生 Array 跟注入元素方法
new Array()
- 陽春版手動放陣列元素
|
|
new Array,搭配 fill() 注入元素
- fill() 方法會將陣列中索引的第一個到最後一個的每個位置全部填入一個靜態的值
- arr.fill(value[, start[, end]]),start 預設 0,end 預設陣列長
- 元素區間為 [start, end),意即包含 start 但不包含 end
|
|
Array.from()
- Array.from() 方法會從類陣列(array-like)或是可迭代(iterable)物件建立一個新的 Array 實體
- 第一個參數是 arrayLike 將類陣列或可迭代物件轉換成陣列
- 第二個參數是 Map 函式迭代陣列中的每一個元素
- 第三個參數是函式執行時的 this 對象
|
|
- querySelectorAll 選到的 nodeList 可以先用 Array.from 方法轉陣列
|
|
小練習
- slice concat forEach
|
|
- map filter reduce
|
|
- 綜合練習
- 三元運算子算是兩行,不會隱含 return
- count++ 跟 ++count 差異
|
|
- 綜合練習 2
|
|
以上為The Complete JavaScript Course - From Zero to Expert的小筆記,附上連結推推這堂課