• 这个 function 接收一个数组参数 arr,其中包含两个数字。返回值为这两个数字范围内所有数字的总和
  • 比如接收的是 [1, 4],那么输出就是 10
  • 需要注意的是,如果接收的是 [4, 1],那么输出也应为 10

基本解法

  1. function sumAll(arr) {
  2. // 用 left 代表较小的数,right 代表较大的数
  3. var left, right;
  4. var sum = 0;
  5. if (arr[0] < arr[1]) {
  6. left = arr[0];
  7. right = arr[1];
  8. } else {
  9. left = arr[1];
  10. right = arr[0];
  11. }
  12. for (var i = left; i <= right; i++) {
  13. sum += i;
  14. }
  15. return sum;
  16. }

优化-使用数学方法

Math.max() Math.min() 等差数列求和公式 : 首项加上末项的和乘以项数除以 2

  1. function sumAll(arr){
  2. let left = Math.min.apply(null,arr)
  3. let right = Math.max.apply(null,arr)
  4. return (left + right) * (right -left +1) /2
  5. }

优化-使用数组方法

  1. function sumAll(arr){
  2. let left = Math.min.apply(null,arr)
  3. let right = Math.max.apply(null,arr)
  4. var numArr = []
  5. for(var i = left;i<=right;i++){
  6. numArr.push(i)
  7. }
  8. return numArr.reduce((prev,next)=>{
  9. return prev + next
  10. })
  11. }
  1. function sumAll(arr) {
  2. var numArr = Array.from({length: Math.abs(arr[0] - arr[1]) + 1}, (_, i) => i + Math.min.apply(null, arr));
  3. return numArr.reduce((prev, next) => prev + next);
  4. }