FreeCodeCamp之sum all numbers in a range
阿新 • • 發佈:2017-09-30
個數 break reduce 出錯 轉換成 所有 調用 ota null
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) {
我們會傳遞給你一個包含兩個數字的數組。返回這兩個數字和它們之間所有數字的和。最小的數字並非總在最前面。
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(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