javascript - Javascript - 在一个范围内,返回所有数字

145 1
 

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



我需要把给定参数之间的每个数相加,对于sumAll([1, 4])和sumAll([5, 10]),代码将通过,因为它创建了两个参数之间的所有数字,并且相加,但是,对于sumAll([10,5])和sumAll([4,1]),因为较大的数字是第一个参数,我相信它不会运行var list。我在之间尝试使用.sort()方法,这样数字就会被排序,但是不能让它工作,如何使用Math.min()Math.max()来执行此代码?

时间: 原作者:

75 4

最简单的方法是使用数学公式

 

1+2+...+n = n(n+1)/2



在这里你想要总和,

 
m+(m+1)+...+n



 

其中m=arr[0]n=arr[1] 。这等于,

 

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



取代上述公式两次等于

 

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



所以正确的代码是

 

function sumAll(arr) {


 var min = arr[0];


 var max = arr[1];


 return (max*(max+1) - (min-1)*min))/2;


}



下面是我使用Math.minMath.max来执行这个操作的方法:

 

function sumAll(arr) {


 var list = [];



 var lower = Math.min(arr[0], arr[1]);


 var upper = Math.max(arr[0], arr[1]);



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


 list.push(i);


 }



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


 return a + b;


 });



 return total;


}



其他人使用过的代码 arr[0] <arr[0]? arr[0] : arr[1]Math.minMath.max函数使代码的可读性比? :运算符。

var total = 0 然后增加它,像这样:

 

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;


}



原作者:
60 0

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

 

function sumAll(arr) {


max=Math.max(arr[0],arr[1]);


min=Math.min(arr[0],arr[1]);


return (max*(max+1)/2)-((min-1)*min/2);


}



很简单的逻辑吧? :)

原作者:
138 5
 

function sumAll(arr) {



 var first = arr[0]> arr[1]? arr[1] : arr[0],


 last = arr[0]> arr[1]? arr[0] : arr[1];


 sum = 0;


 for (var i = first; i <= last; i++) {


 sum += i;


 }


 return sum;


}
原作者:
144 3
 

function sumAll(arr) {


 var max = Math.max.apply(null, arr);


 var min = Math.min.apply(null, arr);


 var arr2 = [];



 for (var i=min; i<=max; i++)


 {


 arr2.push(i);


 }



 return arr2.reduce(function(sum, item){sum+=item; return sum;},0);


}



sumAll([1, 4]);



原作者:
100 3

你可以将数组应用到Math.minMath.max函数。

 

function sumAll(arr) {


 var list = [];



 for (var i = Math.min.apply(null, arr); i <= Math.max.apply(null, arr); i++) {


 list.push(i);


 }



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


 return a + b;


 }, 0);



 return total;


}



[[10, 5], [1, 4], [5, 10], [4, 1]].forEach(function(range) {


 console.log(range.join(' -> ') + ' = ' + sumAll(range));


});

输出:

 

10 -> 5 = 45


1 -> 4 = 10


5 -> 10 = 45


4 -> 1 = 10



原作者:
64 0

.sort()按字符串对数组进行排序,使用compareFunction按数字值排序:

 

arr.sort(function(a, b) {


 return a - b;


});



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

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

2:Math.max(arr[0], arr[1]) || Math.min(arr[0], arr[1])

原作者:
149 3

Javascript代码:

 

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;


 }



HTML代码:

 

<!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>



原作者:
60 2

这是一种方法:

 

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;


 });


}



原作者:
135 5

这就是我如何做的

 

function sumAll(arr) {


return (arr[0]+arr[1])*(Math.max(...arr)-Math.min(...arr)+1)/2;;


}



原作者:
69 0
 

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;


}



它有点像: https://betterexplained.com/articles/techniques-for-adding-the-numbers-1-to-100/

但是,不是始终从1开始,而且是在"rangeStart ",而且numberOfDigits并不总是rangeEnd,但是,这个思路是一样的。

原作者:
...