制作一个函数范围,有 3 个参数,但有例外?

Making a function range, with 3 parameters, with exceptions?

我正在尝试创建一个名为 range 的函数,它接受 3 个整数参数:开始、结束和步骤。

该函数应该return一个数字数组,从头到尾逐步计数。

如果参数不正确,函数应该return一个空数组,例如:

开始、结束或步骤未定义。 开始大于结束。 步骤为负。

这是我的代码:

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

所有这些return一个空数组。

我是JavaScript的新手,所以请...您解释得越多,对我的帮助就越大。

谢谢。

for 循环的第一步是 return。这将退出该功能。

return 上的表达式将 return starti 的初始值)除非它为零,在这种情况下 end 将被return编辑。

问题是

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

将测试 i 的真实性,或 end 的真实性,或 step 是否为 undefined。如果 iend 是正数(除其他外),整个条件将计算为 true,并且空数组将被 returned.

如果您想检查是否有任何参数未定义,您可以使用 .some,传入一个参数数组。

您也不应该 return 循环 for 中 - 测试输入是否无效 first 和 return 如果无效。然后,遍历循环,推到 result,一旦循环完成,return the 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));

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