繁体   English   中英

用于创建生成未定义的新数组的函数

[英]Function to create new array producing undefined

我正在尝试编写一个创建数组的程序,并用一系列数字填充它。 函数范围的x,y,z变量与每个步骤的起始编号,结束编号和编号值相关。 我的目标是生成一个数组,其中包含每个步骤创建的x和y之间的所有数字(包括)。 这是代码:

 let newarray = [] function range (x, y, z){ if (x === undefined || y === undefined || z === undefined || (x > y) || (z < 0)) { return newarray; // returns empty array if x, y, or z is undefined, x is greater than y or z is a negative integer } else if (y > x) { for (x; x < y; x = x += z) { newarray.push(x); //pushes x into an array then adds z into x and loops until x exceeds y } } else { return newarray; //prints out new array } } console.log(range(0, 10, 2)); console.log(range(10, 30, 5)); console.log(range(-5, 2, 3)); 

现在它正在为所有三个数字生成未定义。 我的研究提出了一些关于异步性的东西? 我不确定这意味着什么。

这里有一些事情在起作用:

  1. newArray应该在函数作用域内定义,而不是作为全局变量定义。 否则,对函数的后续调用将继续追加到同一个数组上,这可能不是你的意图(如果是的话,那就是array.concat() )。

  2. 你最后else不可达,因此函数或者返回一个空数组输入失败的验证或返回undefined填充数组中的后,当控制到达函数结束else if块。

  3. x = x += z可能意图为x += z

  4. 你应该禁止z === 0否则你将无限循环。

  5. 正常的JS风格是camelCase变量名。

另外,我发现写条件比条件更容易。 在这种情况下,枚举允许的参数似乎最干净。 此方法使您只能使用一个return语句和更少的条件分支,从而减少可能的混淆。

这是一个解决这些问题的版本:

 function range(x, y, z) { const newArray = []; if ([x, y, z].indexOf(undefined) < 0 && x < y && z > 0) { for (; x < y; x += z) { newArray.push(x); } } return newArray; } console.log(range(0, 10, 2)); console.log(range(10, 30, 5)); console.log(range(-5, 2, 3)); 

请注意,您检查的部分else if (y > x)没有返回。 当此条件为真时,您的函数返回undefined 要解决这个问题,只需添加return newarray; 作为函数的最后一行。 然后使用return new array;删除所有其他行return new array;

  • else块不是必需的,因为它将无法访问并将返回undefined

  • x = x += z校正x = x + z x = x += z

  • 数组声明在外面,所以每次旧数据都会附加来自for循环的更新数据。

  function range (x, y, z){ let newarray = []; if (x === undefined || y === undefined || z === undefined || (x > y) || (z < 0)){ return newarray; } else if (y > x) { for (x; x < y; x = x + z){ newarray.push(x); } } return newarray; } console.log(range(0, 10, 2)); console.log(range(10, 30, 5)); console.log(range(-5, 2, 3)); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM