• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

782
Views
¿Por qué me da este error # Error fatal en, línea 0 # Error fatal de tamaño no válido de JavaScript 169220804?

El código consiste en hacer un arreglo a partir de un rango de números y además tener un tercer argumento en el cual indica los pasos de los números, si tiene un paso de 2 pues por ejemplo va de [1,3,5] al el código funciona bien, excepto cuando paso el step con un número negativo como argumento, por ejemplo NumberRange(10,5,-2) ; Ahí es cuando aparece el error, en el código muestra la lógica que usé para un paso negativo.

imagen del 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);
about 3 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Tiene un error tipográfico en la tercera declaración for , la última parte debe ser una asignación de resta:

 for(;start >= end; start += step){ numberList.push(start); }

Pero el problema que está observando sugiere un error interno en el motor V8 (un error), probablemente un intento de asignar una cantidad incorrecta de memoria. Podría reproducirlo en Node.js y en Chrome con un bucle sin fin simple como el que se muestra a continuación.

 var numberList = []; while (true) { numberList.push(1); }

En mi máquina, esto falla después de solo unos segundos, cuando la matriz contiene 112813858 elementos.

about 3 years ago · Juan Pablo Isaza Report

0

for(;condition;) es solo una forma fea de escribir while(condition) , no lo hagas.

La razón por la que no funciona es la parte for(;start >= end; start - step) , que no actualiza start , simplemente resta el step y desecha el resultado. Por qué no funcionaría con - es que el step es negativo en esa rama, por lo que debe ser start += step para contar hacia abajo.

Por lo general, no necesita las 4 ramas, en su lugar, puede configurar el step en +/-1 si no está undefined , y si realmente lo desea, aún puede validar el signo del step después de configurarlo pero antes de usarlo:

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

Entonces alguien puede molestarse por tener dos bucles con cuerpos idénticos y, después de todo, con una condición un poco más complicada, pueden colapsarse en uno:

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

about 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error