题目
我们会传递给你一个包含两个数字的数组。返回这两个数字和它们之间所有数字的和。
最小的数字并非总在最前面。
如果你被难住了,记得使用 Read-Search-Ask。尝试与他人结伴编程、编写你自己的代码。
这是一些对你有帮助的资源:
Math.max()
Math.min()
Array.reduce()
function sumAll(arr) {
return 1;
}
sumAll([1, 4]);
思路
- 先将两个数字判断大小,找到最大值,和最小值,应该会用到提供的max(),min()两个函数;
- 循环计算mi -> max 间所有数字的和;
解答
- 使用题目要求的 reduce;
function sumAll(arr) {
var max = Math.max(arr[0],arr[1]); // 取得最大值
var min = Math.min(arr[0],arr[1]); // 取得最小值
var sum = []; //存储取到的所有数
for (var i=0;i<= max-min;i++){
sum[i] = min+i;
}
return sum.reduce(function(a,b){
return a+b;
});
}
sumAll([1, 4]);
- 但经过思考发现,这个写法有点多此一举,并不需要将取到的数字先存起来,直接循环时相加就可以了,于是修正代码如下:
function sumAll(arr) {
var max = Math.max(arr[0],arr[1]); // 取得最大值
var min = Math.min(arr[0],arr[1]); // 取得最小值
var sum =0;
for (var i=min;i<= max;i++){
sum+= i;
}
return sum;
}
sumAll([1, 4]);
发现第二种比第一种代码简洁很多;