gpt4 book ai didi

javascript - 创建新数组的函数产生未定义

转载 作者:行者123 更新时间:2023-11-30 11:14:52 24 4
gpt4 key购买 nike

我正在尝试编写一个程序来创建一个数组并用一系列数字填充它。函数范围的 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));

现在它正在为所有三个数字生成 undefined。我的研究表明了异步性?我不确定那是什么意思。

最佳答案

这里有几件事在起作用:

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

    <
  2. 您的最后一个 else 无法访问,因此该函数将为验证失败的输入返回一个空数组,或者在控件到达结尾时返回 undefinedelse if block 中填充数组后运行。

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

关于javascript - 创建新数组的函数产生未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52012222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com