制作具有3个参数的功能范围,例外?

时间:2018-08-10 04:43:38

标签: javascript ternary-operator

我正在尝试创建一个名为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的新手,所以...请您解释的越多,对我的帮助就越大。

谢谢。

3 个答案:

答案 0 :(得分:2)

问题是

return i || end || step == undefined ? []

将测试i的真实性,或end的真实性,或者测试step是否为undefined。如果iend是正数(除其他外),则整个条件的结果将为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上的表达式将返回starti的初始值),除非它为零,否则将返回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));