¿Por qué parseInt
da NaN
cuando no lo estoy poniendo en una función de flecha? Lo que es extraño es que solo 50
se analizan correctamente, mientras que los demás no... ¿Hay algo malo en poner parseInt
como argumento? Quiero asegurarme de que todos sean números enteros, funciona con una función de flecha, pero me gustaría saber por qué no funciona simplemente pasando la función completa. Incluso intentar vincularlo a la window
con .map(parseInt.bind(window))
no funciona. ¿Es un problema con el código fuente?
function toPercent(array) { let arr = array.map((a, _, s) => a / s.reduce((a, b) => a+b) * 100) console.log(arr) return arr.map(parseInt) } console.log(toPercent([2, 1, 1]))
function toPercent(array) { let arr = array.map((a, _, s) => a / s.reduce((a, b) => a+b) * 100) console.log(arr) return arr.map(n => parseInt(n)) } console.log(toPercent([2, 1, 1]))
La devolución de llamada al map
se llama con múltiples parámetros (element, index, array)
, y parseInt
toma múltiples parámetros (string, radix)
por lo que el index
se pasa como la radix
. Probablemente no sea eso lo que pretendías.
Los NaN surgen porque la base debe estar entre 2 y 36. Por lo tanto, obtendrá algunos resultados extraños, la base es 1 y otros índices intentarán analizar de acuerdo con la base en constante aumento. Por una peculiaridad aún mayor, radix 0 significa usar la base 10 (a menos que la cadena comience con 0x
o 0X
, en cuyo caso significa usar la base 16 ignorando el prefijo de la manera esperada). parseInt
devuelve NaN
cuando falla el análisis.