1. 程式人生 > >javaScript區間求值演算法挑戰

javaScript區間求值演算法挑戰

給你一個包含兩個數字的陣列。返回這兩個數字和它們之間所有數字的和。(最小的數字並非總在最前面

思路1:用sort()方法 對數字排序得出最大最小值,進行累加。

function sumAll(arr) {
    //對陣列進行升序排序
    arr.sort(function(x,y){
        return x-y;
    });
    //定義一個變數,用來存放和
    var sum = 0;
    //求出和
    for(var i = arr[0];i <= arr[1];i++){
        sum += i;
    }
    //返回和
    return sum;

}

思路2:使用Math.max和Math.min獲得陣列的最大最小值,再把它們之間的數放入新的陣列, 最後用 redece()方法獲得和。

注:(1)js中Math.max(),Math.min()不能接受陣列作引數,Math.max(array)這種操作是不存在的;
       而apply()是所有函式都有的方法,fun.apply(thisArg, [argsArray]),thisArg是fun 函式執行時指定的 this 值,

       argsArray是一個數組或者類陣列物件,其中的陣列元素將作為單獨的引數傳給 fun 函式。

       (2)reduce()方法可以對陣列的每一個元素進行操作,下面程式碼中value是單個元素的值,sum則是這些元素的累加值。

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 (var i = min; i <= max; i++) {
         newArr[i - min] = i;
     }
     //reduce方法求和
     var sum = newArr.reduce(function (sum, value) {
         return sum + value;
     }, 0);
     return sum;

}

思路3:判斷陣列中兩個數的大小,進行累加求和。

function sumAll(arr) {
    var sum=0;  
    if(arr[0]<arr[1]){  
        for(var i=arr[0];i<=arr[1];i++){  
            sum += i;  
        }
    }else{  
        for(var k=arr[1];k<=arr[0];k++){  
            sum += k;  
        }  
    }  
    return sum; 
}