gpt4 book ai didi

javascript - 为什么它给我这个错误 # Fatal error in , line 0 # Fatal JavaScript invalid size error 169220804?

转载 作者:行者123 更新时间:2023-12-05 03:27:10 29 4
gpt4 key购买 nike

该代码包括从一系列数字创建一个数组,以及第三个参数,其中它指示数字的步长,如果它的步长为 2,例如它来自 [1,3, 5] 代码工作正常,除非我以负数作为参数传递 step,例如NumberRange(10,5,-2);那就是出现错误的时候,在代码中它显示了我用于否定步骤的逻辑。

Image of the error

function NumberRange(start, end, step){

var numberList = [];

if(typeof(step) == 'undefined'){

if(start < end){
for(;start <= end; start++){
numberList.push(start);
}

console.log(numberList);
}
else if(start > end){
for(;start >= end;){
numberList.push(start);
start -= 1;
}

console.log(numberList);
}
}
else if(start > end && (Math.sign(step) == -1)){ // This is the logic I created when a negative step is given as an argument.
for(;start >= end; start - step){
numberList.push(start);
}

console.log(numberList);
}
else if(start < end && (Math.sign(step) == -1)){
console.log("Negative step cant work since the value of the beginning of the list is less than the end of it")
}
else{
for(;start <= end;){
numberList.push(start);
start += step;
}

console.log(numberList);
}

//return numberList;
};

NumberRange(10,5,-2);

最佳答案

for(;condition;) 只是编写 while(condition) 的丑陋方式,不要这样做。

为什么它不起作用是 for(;start >= end; start - step) 部分,它不更新 start,只是减去 step 并丢弃结果。为什么它不能与 - 一起使用是因为 step 在那个分支中是负的,所以它应该是 start += step 以便计数向下。

通常你不需要这 4 个分支,如果它是 undefined,你可以将 step 设置为 +/-1,如果你真的想要,你可以在设置之后但在使用之前仍然验证 step 的符号:

function NumberRange(start, end, step) {
if (typeof(step) == 'undefined') {
step = Math.sign(end - start);
}

if (Math.sign(step) != Math.sign(end - start)) {
console.log(`Can't count from ${start} to ${end} using ${step} as stepsize.`);
} else {
var numberList = [];
if (start > end) {
while (start > end) {
numberList.push(start);
start += step;
}
} else {
while (start < end) {
numberList.push(start);
start += step;
}
}
console.log(numberList.join());
return numberList;
}
}

NumberRange(10, 5, -2);
NumberRange(1, 2);
NumberRange(2, 1);
NumberRange(1, 3, 2);
NumberRange(1, 3, -2);
NumberRange(3, 1, -2);
NumberRange(3, 1, 2);

然后有人可能会对具有相同主体的两个循环感到恼火,毕竟,在更复杂的条件下,它们可以合并为一个:

function NumberRange(start, end, step) {
if (typeof(step) == 'undefined') {
step = Math.sign(end - start);
}

if (Math.sign(step) != Math.sign(end - start)) {
console.log(`Can't count from ${start} to ${end} using ${step} as stepsize.`);
} else {
var numberList = [];
while ((step > 0 && start < end) || (step < 0 && start > end)) {
numberList.push(start);
start += step;
}
console.log(numberList.join());
return numberList;
}
}

NumberRange(10, 5, -2);
NumberRange(1, 2);
NumberRange(2, 1);
NumberRange(1, 3, 2);
NumberRange(1, 3, -2);
NumberRange(3, 1, -2);
NumberRange(3, 1, 2);

关于javascript - 为什么它给我这个错误 # Fatal error in , line 0 # Fatal JavaScript invalid size error 169220804?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71541488/

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