- 这个 function 接收一个数组参数 arr,其中包含两个数字。返回值为这两个数字范围内所有数字的总和
- 比如接收的是 [1, 4],那么输出就是 10
- 需要注意的是,如果接收的是 [4, 1],那么输出也应为 10
基本解法
function sumAll(arr) {
// 用 left 代表较小的数,right 代表较大的数
var left, right;
var sum = 0;
if (arr[0] < arr[1]) {
left = arr[0];
right = arr[1];
} else {
left = arr[1];
right = arr[0];
}
for (var i = left; i <= right; i++) {
sum += i;
}
return sum;
}
优化-使用数学方法
Math.max() Math.min() 等差数列求和公式 : 首项加上末项的和乘以项数除以 2
function sumAll(arr){
let left = Math.min.apply(null,arr)
let right = Math.max.apply(null,arr)
return (left + right) * (right -left +1) /2
}
优化-使用数组方法
function sumAll(arr){
let left = Math.min.apply(null,arr)
let right = Math.max.apply(null,arr)
var numArr = []
for(var i = left;i<=right;i++){
numArr.push(i)
}
return numArr.reduce((prev,next)=>{
return prev + next
})
}
function sumAll(arr) {
var numArr = Array.from({length: Math.abs(arr[0] - arr[1]) + 1}, (_, i) => i + Math.min.apply(null, arr));
return numArr.reduce((prev, next) => prev + next);
}