匆匆的就來到第四章尾聲..
今天來寫第四章的練習題(怕)
寫一個 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(){
}