iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0

抽象化 abstraction

將細節隱藏起來的作法,站在更高的層次上討論問題

抽象通用性

假設要多次執行 console.log,可由 for loop 來表示..

for (let i=0;i<10;i++){
    console.log(i);
}

也可以將『動作』作為 parameter 傳遞,以函式來表達『做某件事』在要用到的情況下才建立函式值,這樣更簡單

function repeat( n,action ){
    for(let i = 0; i < n; i++){
        action(i);
    }
}
repeat(3, console.log);

陣列的高階函式 Higher Order Methods of Array

高階函式的特點為接受一個或多個函式作為 parameter 或是回傳值,高階ㄧ詞來自於數學
高階函式可隱藏複雜性,並清晰表達意圖,因此有助於函式的抽象化表達

舉例來說像 filter 便隱藏了 loop 的複雜性,不需寫額外 loop 來執行 filter,只需簡單的使用 filter() 即可

  • map
    回傳一個新 array,其元素為經過 callback function 執行後的結果
let numbers = [2, 4, 6, 8, 10];
function multiplier(val, array) {
     return array.map((n) => n * val);
}
console.table(multiplier(3, numbers)); // [6, 12, 18, 24, 30]
  • filter
    回傳一個新 array,為原本array的淺拷貝(shallow copy),其元素為符合 callback function 中條件執行後的結果,會將不符合 callback function 條件的元素篩掉

如果 filter 的 callback function 僅執行 return value,會將 falsy value 篩掉

let filterTarget = [0, 1, 3, 5, NaN, null, 7, undefined, 9, 11];
console.log(filterTarget.filter((x) => x)); // [1, 3, 5, 7, 9, 11]
  • forEach
    迭代陣列內的所有元素,不可中斷

forEach 跟 for..of 的差異

name 差異與用途
forEach 不可中斷,用於簡單的迭代(simple, non-iteration loops)
for..of 可用 break 中斷,continue 繼續,且適用於在 loop 中執行 asynchronous operations
  • reduce

  • some
    只要被傳入的陣列內有一項元素符合 callback function 條件,則 return true,反之則 return false

let target = [17, 35, 53, 1, 9, 13];

function findIsEven(array) {
    return array.some((n) => n % 2 === 0);
}

console.log(findIsEven(target)); // false

上一篇
Chapter 4 物件與陣列 練習題-day9
下一篇
Chapter 5 高階函式 練習題-待補-day11
系列文
溫故而知新:Eloquent Javascript 閱讀筆記16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言