iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0

匆匆的就來到第四章尾聲..
今天來寫第四章的練習題(怕)

範圍內的數字總和 The Sum of a Range

寫一個 range 函式,傳入三個參數 start, end, step
然後回傳一個由 start 在內 到 end 的陣列,step 則表示陣列內的數字與數字間間隔多少
舉例來說
range(1, 5)
回傳陣列為 [1,2,3,4,5]
range(15,2,-2)
回傳陣列則為 [15,13,11,9,7,5,3]

接著寫 sum 函式,該函式會將陣列內所有元素加總,取得範圍內的數字總和

function range(start, end, step = 1) {
    let result = [];
    if (!step || typeof step !== "number") {
        console.error("invalid step value");
        return false;
    }
    if (start < end && step > 0) {
        for (i = start; i < end + 1; i += step) {
            result.push(i);
          }
        } else if (start > end && step < 0) {
            for (i = start; i > end - 1; i += step) {
                result.push(i);
        }
     }
     return result;
}

range(1, 10);
range(1, 10, 2);
range(5, 2, -1);

function getSum(array) {
    let result = 0;
    for (let number of array) {
        result += number;
    }
    return result;
}
let val = getSum(range(1, 10));
console.log(val); // 55

反轉陣列

寫 reverseArray 跟 reverseArrayInPlace 將傳入的陣列進行反轉,
reverseArray 函式接受一個陣列作為參數,然後產生一個新陣列
reverseArrayInPlace 函式做的事跟 reverse method 一樣,藉由反轉陣列裡的元素來修改參數的陣列
不能使用標準的 Array.reverse() 方法

回想純函式與副作用的章節,哪一種函式可以在更多情況下發揮作用,哪一種函式的執行效率較快?

reverseArray,建立新的空陣列,從目標陣列的末端往回數並將一個個元素 push 到新建立的陣列中

function reverseArray(targetArray) {
    let result = [];
    for (let i=targetArray.length; i> 0; i--) {
        result.push(targetArray[i]);
    }
    return result;
}

reverseArray([1, 2, 3, 4, 5, 6, 7]); // [7,6,5,4,3,2,1]

reverseArrayInPlace,將陣列內的元素兩兩互換,換到目標陣列長度的一半就完成

function reverseArrayInPlace(){
}

資料結構 List

深入比較 Deep Comparison


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

尚未有邦友留言

立即登入留言