¿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.