我们会传递给你一个包含两个数字的数组。返回这两个数字和它们之间所有数字的和。最小的数字并非总在最前面。
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]);