我正在尝试创建一个名为range的函数,该函数需要3个整数参数:开始,结束和步进。
该函数应该从开始到结束逐步返回一个数字数组。
如果给定不正确的参数,该函数应返回一个空数组,例如:
开始,结束或步骤未定义。 开始大于结束。 步骤是否定的。
这是我的代码:
const range = function(start, end, step) {
const result = []
for (let i = start; i <= end; i += step) {
return i || end || step == undefined ? []
: i > end ? []
: step < 0 ? []
: result.push(i)
}
return result;
}
console.log(range(0, 10, 2));
console.log(range(10, 30, 5));
console.log(range(-5, 2, 3));
所有这些都返回一个空数组。
我是JavaScript的新手,所以...请您解释的越多,对我的帮助就越大。
谢谢。
答案 0 :(得分:2)
问题是
return i || end || step == undefined ? []
将测试i
的真实性,或end
的真实性,或者测试step
是否为undefined
。如果i
或end
是正数(除其他外),则整个条件的结果将为true
,并且将返回空数组。
如果要检查是否有未定义的参数,可以使用.some
,并传入参数数组。
您也不应该在return
循环中for
内-测试输入是否首先无效,如果无效则返回。然后,遍历循环,推送到result
,循环完成后,返回result
。例如,这是一种可能的实现:
const range = function(start, end, step) {
if (
[start, end, step].some(arg => arg === undefined)
|| start > end
|| step < 0
) {
return [];
}
const result = []
for (let i = start; i <= end; i += step) {
result.push(i)
}
return result;
}
console.log(range(10, 0, 3));
console.log(range(0, 10, 2));
console.log(range(10, 30, 5));
console.log(range(-5, 2, 3));
答案 1 :(得分:0)
for
循环的第一步是return
。这将退出功能。
return
上的表达式将返回start
(i
的初始值),除非它为零,否则将返回end
。
答案 2 :(得分:0)
const range = function(start, end, step) {
const result = []
for (let i = start; i <= end; i += step) {
i==undefined ? [] : end==undefined
? [] : step==undefined
? [] : i > end
? [] : step < 0
? [] : result.push(i)
}
return result;
}
console.log(range(10, 0, 3));
console.log(range(0, 10, 2));
console.log(range(10, 30, 5));
console.log(range(-5, 2, 3));