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;
}