Javascript 返回范围内所有数字的总和 函数sumAll(arr){ var列表=[]; 对于(var i=arr[0];i

Javascript 返回范围内所有数字的总和 函数sumAll(arr){ var列表=[]; 对于(var i=arr[0];i,javascript,sorting,reduce,Javascript,Sorting,Reduce,函数sumAll(arr){ var first=arr[0]>arr[1]?arr[1]:arr[0], last=arr[0]>arr[1]?arr[0]:arr[1]; 总和=0; 对于(var i=first;i您可以将数组应用于Math.min和Math.max函数 函数sumAll(arr){ var列表=[]; 对于(var i=Math.min.apply(null,arr);i最简单的方法是使用数学公式 function sumAll(arr) { var list

函数sumAll(arr){
var first=arr[0]>arr[1]?arr[1]:arr[0],
last=arr[0]>arr[1]?arr[0]:arr[1];
总和=0;

对于(var i=first;i您可以将数组应用于
Math.min
Math.max
函数

函数sumAll(arr){
var列表=[];

对于(var i=Math.min.apply(null,arr);i最简单的方法是使用数学公式

function sumAll(arr) {
    var list = [];

    for (var i = arr[0]; i <= arr[1]; i++) {
        list.push(i);
    }

    var total = list.reduce(function(a, b) {
        return a + b;

    });

    return total;
}

sumAll([10, 5]);
//sumAll([1, 4]);  //returns 10
//sumAll([5, 10]); //returns 45
//sumAll([4, 1]);
给你总数

1+2+...+n = n(n+1)/2
其中
m=arr[0]
n=arr[1]
。这等于差值

m+(m+1)+...+n
将上述公式代入两次等于

(1+2+...+n) - (1+2+...+(m-1))
所以正确的代码是

n(n+1)/2 - (m-1)m/2

原始答案(不使用-留给后代):

下面是我如何使用
Math.min
Math.max
来执行此操作:

function sumAll(arr) {
  var min = arr[0];
  var max = arr[1];
  return (max*(max+1) - (min-1)*min)) / 2;
}
.sort()
按字符串对数组排序,使用比较函数按数值排序:

function sumAll(arr) {
    var lower = Math.min(arr[0], arr[1]);
    var upper = Math.max(arr[0], arr[1]);

    var total = 0;

    for (var i = lower; i <= upper; i++) {
        total += i;
    }

    return total;
}
如果要使用最小值或最大值,请将数组作为参数传递:

1)
Math.max.apply(this,arr);
Math.min.apply(this,arr);


2)
Math.max(arr[0],arr[1])
Math.min(arr[0],arr[1])
Javascript代码:

arr.sort(function(a, b) {
  return a - b;
});
function myFunction(arr) {
  console.log(arr);
  var list = [];

  var startVal = arr[0];
  console.log(startVal);
  var stopVal = arr[1];
  console.log(stopVal);

  while(startVal < stopVal+1){
    list.push(startVal++);
  }
      console.log(list);

      var total = list.reduce(function(a, b) {
          return a + b;

      });

     // return total;
      document.getElementById("demo").innerHTML = total;
  }
函数myFunction(arr){
控制台日志(arr);
var列表=[];
var startVal=arr[0];
控制台日志(startVal);
var stopVal=arr[1];
控制台日志(stopVal);
而(startVal
HTML代码:

arr.sort(function(a, b) {
  return a - b;
});
function myFunction(arr) {
  console.log(arr);
  var list = [];

  var startVal = arr[0];
  console.log(startVal);
  var stopVal = arr[1];
  console.log(stopVal);

  while(startVal < stopVal+1){
    list.push(startVal++);
  }
      console.log(list);

      var total = list.reduce(function(a, b) {
          return a + b;

      });

     // return total;
      document.getElementById("demo").innerHTML = total;
  }

试试看

这是数学方程派上用场的时候之一。请查看以下代码:

函数sumAll(arr){
max=Math.max(arr[0],arr[1]);
min=Math.min(arr[0],arr[1]);
返回值(最大*(最大+1)/2)-(最小-1)*最小/2);
}

非常简单的逻辑,对吗?:)

这是一种方法:

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
  <script src="app2.js"></script>
</head>
<body>
  <button onclick="myFunction([5,10])">Try it</button>
  <div id="demo"></div>
</body>
</html>
函数sumAll(arr){
var sortedArray=arr.sort(函数(a,b){
返回a-b;
});
返回分拣机Darray.reduce(功能(a、b、启动、arr){
var temp=a,小计=a;
而(温度
我就是这样滚的

function sumAll(arr) {
  var sortedArray = arr.sort(function(a,b) { 
    return a-b;
  });

  return sortedArray.reduce(function(a, b, start, arr) {
    var temp = a, subTotal = a;
    while (temp < b - 1) {
      subTotal += ++temp;
    }

    return subTotal + b;
  });
}
我想说的很简单:

function sumAll(arr) {
return (arr[0]+arr[1])*(Math.max(...arr)-Math.min(...arr)+1)/2;;
}
函数sumAll(arr){
var总和=0;
arr.sort(函数(a,b){
返回a-b;
});

对于(var i=arr[0];i我更喜欢简单

function sumAll(arr) {

  var sum = 0;

  arr.sort(function(a, b) {
    return a - b;
  });

  for (var i = arr[0]; i <= arr[arr.length - 1]; i++) {
   sum += i;
  }

  return sum;

}

sumAll([4, 1]);
函数sumAll(arr){
var max=Math.max.apply(null,arr);
var min=Math.min.apply(null,arr);
var总和=0;
对于(var i=min;i
函数sumAll(arr){
var max=Math.max.apply(null,arr);
var min=Math.min.apply(null,arr);
var arr2=[];
对于(var i=min;i
这是一种:


但并非总是从1开始,而是从“rangeStart”开始,并且numberOfDigits并不总是rangeEnd,但想法是一样的。

在α和β之间,有β−α+1数字,我们需要

function sumAll(arr) {
  const rangeStart = Math.min(arr[0], arr[1]);
  const rangeEnd = Math.max(arr[0], arr[1]);
  const numberOfDigits = rangeEnd - rangeStart + 1;

  return (rangeEnd + rangeStart) * numberOfDigits / 2;
}
垂直相加,我们有

S=α+(α+1)+⋯+β=β+(β−1)+⋯+α
因此

这种“逆加”技术是由高斯提出的,也可用于对任何算术级数求和

S=(β−α+1)(α+β)2

这个呢?遵循高斯公式:

函数sumAll(arr){
返回arr.reduce((a,b)=>(a+b)*(数学abs(a-b)+1)/2)
}
log(sumAll([1,4]);//10
console.log(sumAll([5,10]);//45
log(sumAll([10,5]);/45
类似这样的O(1)方法可能是最好的方法:

function sumAll(arr) {
  let alpha = Math.min(...arr);
  let beta= Math.max(...arr); 
  return ((beta - alpha + 1)*(alpha + beta))/2;      
}

我们的想法是将萨姆兰奇方程孤立起来,使其成为可以从任何地方调用的唯一真理来源。可重用性始终是一个优势。

添加ES6

function SumRange(a, b) {
    if (a > b) return 0;
    var sum = (b * ++b) / 2;
    return a > 1 ? sum - SumRange(0, --a) : sum;
}

var array = [1, 100];

console.log(SumRange(array[0], array[1]));//5050
console.log(SumRange(10, 100));//5005
函数sumAll(arr){
const min=Math.min(…arr)
常量最大值=数学最大值(…arr)
让列表=[]
for(设i=min;i prev+next);
}
sumAll([1,4]);
使用while循环:

function sumAll(arr) {
   const min = Math.min(...arr)
   const max = Math.max(...arr)
   let list = [] 
   for(let i = min;i <= max; i++){
      list.push(i)
   }

   return list.reduce((prev, next) => prev + next);
}

sumAll([1, 4]);
函数sumAll(arr){
变量i=数学最小值(…arr)
var总计=0

虽然(我不会忘记将
0
传递给累加器以
reduce
!虽然此代码片段可能会解决问题,但确实有助于提高您的文章质量。请记住,您将在将来回答读者的问题,而这些人可能不知道您的代码建议的原因。同时,请尽量不要cro。)在代码中添加解释性注释,因为这会降低代码和解释的可读性!如果您不真实地分享其背后的公式,这并不简单。到目前为止,这是最好的答案。使用数学,而不是暴力;)说明:接受的答案应该是@Nigel建议的答案。它使用公式来解决您的问题,而不是循环或列表!谢谢@PatrickDorn。也更新了我的答案。我不知道为什么我在最初发布时没有想到这个公式。
function sumAll(arr) {
   const min = Math.min(...arr)
   const max = Math.max(...arr)
   let list = [] 
   for(let i = min;i <= max; i++){
      list.push(i)
   }

   return list.reduce((prev, next) => prev + next);
}

sumAll([1, 4]);
function sumAll(arr) {
    var i = Math.min(...arr)
    var total = 0
    while(i <= Math.max(...arr)) {
        total += i
        i++
    }

    return total;
}
sumAll([1, 4];