1. 程式人生 > >FreeCodeCamp之sum all numbers in a range

FreeCodeCamp之sum all numbers in a range

個數 break reduce 出錯 轉換成 所有 調用 ota null

我們會傳遞給你一個包含兩個數字的數組。返回這兩個數字和它們之間所有數字的和。最小的數字並非總在最前面。

sumAll([1, 4]) 應該返回一個數字。 sumAll([1, 4]) 應該返回 10。 sumAll([4, 1]) 應該返回 10。 sumAll([5, 10]) 應該返回 45。 sumAll([10, 5]) 應該返回 45。 題目給出的提示是Math.max() Math.min() 和array.reduce()。前兩個用法一模一樣,是靜態方法,Math.max(number1,number2,number3....)返回numbers中最大/最小的數不能直接作用數組,Math.max([number1,number2,number3])是會出錯數組不能轉換成數字,若是空數組可以轉換成0就不會出錯,要想用Math.max只能使用函數,用apply:
function getMaxOfArr(function(number){ return Math.max.apply(null,arr); } var max=getMaxOfArr(arr); reduce作用於數組。arr.reduce(callbackfunction(),index);從index處一次調用arr中的每個值,執行callbackfunction; 使用Math.max和reduce實現過程: function sumAll(arr) {

function getMaxOfArr(numArr){
return Math.max.apply(null,numArr);
}
function getMinOfArr(numArr){
return Math.min.apply(null,numArr);
}
var max= getMaxOfArr(arr);
var min=getMinOfArr(arr);
var newArr=[];
for(i=min;i<=max;i++){
newArr.push(i);
}
var total=newArr.reduce(function(sum,val){
return sum+val;
},0);
return total;

}

使用sort後可以大大減少代碼量:

function sumAll(arr) {

//數組排序

arr.sort(function(a,b){

return a-b;});

var sum=0;
for(i=arr[0];i<=arr[1];i++){
sum+=i;
}
return sum;
}

sumAll([5, 4]);

FreeCodeCamp之sum all numbers in a range