我们会传递给你一个包含两个数字的数组。返回这两个数字和它们之间所有数字的和。最小的数字并非总在最前面。

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]);

 
posted on 2017-09-29 23:35  多学点才踏实  阅读(142)  评论(0编辑  收藏  举报