valor objects minimo maximo from example array javascript arrays math max nan

javascript - objects - ¿Por qué math.max() devuelve NaN con una matriz de enteros?



typescript max in array (4)

Estoy tratando de obtener el número más alto de una array simple:

data = [4, 2, 6, 1, 3, 7, 5, 3]; alert(Math.max(data));

He leído que si incluso uno de los valores de la matriz no se puede convertir a número, devolverá NaN , pero en mi caso, he verificado dos typeof con typeof para asegurarme de que son todos números, entonces, ¿qué puede ser ¿mi problema?


La razón por la cual su código no funciona es porque Math.max espera que cada parámetro sea un número válido. Esto se indica en la documentación de la siguiente manera:

Si al menos uno de los argumentos no se puede convertir a un número, el resultado es NaN.

En su caso, solo está proporcionando 1 argumento, y ese 1 valor es una matriz, no un número (no llega a verificar lo que está en una matriz, simplemente se detiene al saber que no es un número válido).

Una posible solución es llamar explícitamente a la función pasando una matriz de argumentos. Al igual que:

Math.max.apply(Math, data);

Lo que esto hace efectivamente es lo mismo que si especificara manualmente cada argumento sin una matriz:

Math.max(4, 2, 6, 1, 3, 7, 5, 3);

Y como puede ver, cada argumento ahora es un número válido, por lo que funcionará como se esperaba.


No funciona porque está pasando una matriz como parámetro en lugar de números separados por comas. Intente difundir la matriz de esta manera:

data = [4, 2, 6, 1, 3, 7, 5, 3]; alert(Math.max(...data));


Si tiene que usar la función Math.max y un número de la matriz puede estar indefinido, puede usar:

x = Math.max(undefined || 0, 5) console.log(x) // prints 5


si ve el documento para Math.max , puede ver la siguiente descripción

Debido a que max () es un método estático de Math, siempre lo usa como Math.max (), en lugar de como un método de un objeto Math que creó (Math no es un constructor).

Si no se dan argumentos, el resultado es -Infinity.

Si al menos uno de los argumentos no se puede convertir a un número, el resultado es NaN.

Cuando llamas a Math.max con un parámetro de matriz como

Math.max([1,2,3])

llama a esta función con un parámetro: [1,2,3] y javascript intenta convertirlo en número y obtener ("1,2,3" -> NaN ) falla.
Así resultado como se esperaba - NaN

NOTA: si la matriz tiene solo un número, todos funcionan correctamente

Math.max([23]) // return 23

porque [23] -> "23" -> 23 y encubierto a Number está hecho.

Si desea obtener el elemento max de la matriz, debe usar la función de apply , como

Math.max.apply(Math,[1,2,3])

o puede usar el nuevo operador de propagación

Math.max(...[1,2,3])