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