我正在为freeCodeCamp工作coding exercise。练习的目的是将数组作为包含2个数字的输入。它应该返回这两个数字的总和以及它们之间的所有数字。
我尝试使用Math.min()
和Math.max()
作为参数编写一个简单的for循环,但不知何故,我的函数总是返回0.基本逻辑是for循环从最低编号开始数组,然后递增1直到它到达数组中的最大数字,并始终将数字添加到输出变量。
function sumAll(arr) {
var outcome = 0;
for(var x = Math.min(arr); x<Math.max(arr); x++) {
outcome += x;
}
return outcome;
}
sumAll([1, 4]);
感谢任何帮助。
答案 0 :(得分:1)
Math.min
和Math.max
不会将数组作为参数,而是将数字列表作为单独的参数。
要使这些方法适用于数组,请使用此技巧:
Math.min.apply(Math, [1,2,3]) // --> 1
Math.max
答案 1 :(得分:1)
Math.min
和Math.max
不接受列表作为参数。如果要对其应用列表,请使用Math.min.apply(Math, arr)
。
答案 2 :(得分:1)
您使用Math.max
和Math.min
错误。要将它们与数组一起使用,可以使用spread运算符。 (注意:扩展运算符是ECMAScript 6中的新增功能,因此旧版浏览器不支持它。)见下文:
function sumAll(arr) {
var outcome = 0;
for(var x = Math.min(...arr); x<Math.max(...arr); x++) {
outcome += x;
}
return outcome;
}
sumAll([1, 4]);
有关详细信息,请参阅MDN:
答案 3 :(得分:0)
问题是Math.min ()
和Math.max ()
不将数组作为参数。这是一个可以接受的替代方案吗?
function sumAll(min, max) {
var outcome = 0;
for(var x = min; x<max; x++) {
outcome += x;
}
return outcome;
}
sumAll(1,4);
其他一些人提供了从阵列中获取最低/最高数字的方法。
答案 4 :(得分:0)
错误在Math.min(arr)
。 Math.min(arr)
评估为NaN
。如果您需要从arr
获取最小数值,请改为使用Math.min.apply(Math, arr)
。
祝你好运!
答案 5 :(得分:0)
试试这个
function sumAll(arr) {
console.log(arr);
var outcome = 0;
for(var x = Math.min(...ar1); x<Math.max(...ar1); x++) {
outcome += x;
}
return outcome;
}
Math.min(...ar1)
paranthesis中的三个点称为扩展运算符
扩展运算符允许在需要多个参数(用于函数调用)或多个元素(用于数组文字)的位置扩展表达式。
答案 6 :(得分:0)
function sum(arr) {
var min = arr[0] < arr[1] ? arr[0] : arr[1],
max = arr[0] > arr[1] ? arr[0] : arr[1],
result = 0;
for (var i = min; i <= max; i++) {
result += i;
}
return result;
}
答案 7 :(得分:0)
实际上你的代码永远不会进入for循环,因为在for循环初始化部分你要为x<Math.max(arr)
分配数组的最小值然后一旦你正在比较x和数组{min}的min所以条件失败了。那么outcome
总是为0。