esta es una función que simplemente incrementa un número en la matriz, pero el problema que interacciono cuando pongo muchos números en la matriz (más de 16 dígitos) cuando uso parseInt() acaba de devolver 16 números correctos y más que eso es cero
6145390195186705000y esperado
6145390195186705543la función
var plusOne = function(digits) { var numbersInString = digits.join(''); var theNumbers = parseInt(numbersInString); var theNumbersPlusOne = theNumbers + 1; var result = String(theNumbersPlusOne).split("").map((theNumbersPlusOne) => { return Number(theNumbersPlusOne); }); return result; }; console.log(plusOne([6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]));Puede usar BigInt para manejar este problema.
var plusOne = function(digits) { var numbersInString = digits.join(''); var theNumbers = BigInt(numbersInString); var theNumbersPlusOne = theNumbers + BigInt(1); var result = theNumbersPlusOne.toString().split("").map((theNumbersPlusOne) => { return Number(theNumbersPlusOne); }); return result; }; console.log(plusOne([6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]));Simplemente ampliando mi comentario anterior con otra solución ...
Ha superado el valor entero seguro máximo. ( Number.MAX_SAFE_INTEGER , que es igual a 9007199254740991 ). Los números más grandes que este no son compatibles con los tipos de enteros estándar en javascript, o más bien no hay suficiente precisión para representarlos . Cualquier cosa mayor que esto se representa en notación científica y los dígitos adicionales se truncan y se representan solo como ceros.
Dicho esto, ni siquiera necesita convertir la matriz en una cadena en un número entero solo para incrementarla. Simplemente puede incrementar los dígitos individuales en la matriz, comenzando por el final y avanzando hacia adelante para "llevar el 1", por así decirlo.
var plusOne = function(digits) { for(let i = digits.length - 1; i > -1; i--) { if(digits[i] == 9) { digits[i] = 0; if(i == 0) digits = [1].concat(digits); } else { digits[i]++; break; } } return digits; }; console.log(plusOne([6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]));