No puedo entender las diferencias entre [...array].map(...) y [...array.map(...)] . ¿Son diferentes? En caso afirmativo, ¿por qué y cómo?
[...array].map(...) generará una nueva copia superficial de una matriz ( [...array] ) y luego .map sobre ella y devolverá una nueva matriz como valor de retorno.[...array.map(...)] .map sobre la matriz original, que devolverá una nueva matriz, e inmediatamente hará una copia superficial de la nueva matriz ( [...array.map(...)] ). Debo admitir que realmente no entiendo el caso de uso de este enfoque, porque .map en sí mismo está devolviendo una nueva matriz a la que ninguna otra variable debería tener una referencia, no veo ningún valor en emitir inmediatamente un copia superficial de la misma. (Además, como lo señaló chazsolo en los comentarios, si la array no fuera una matriz, sino algún otro tipo como un Set , el [...array.map(...)] arrojaría un error, ya que las instancias de Set no tienen método .map ).
Bueno [...array.map(...)] es lo mismo que array.map(...) excepto que hace una extensión/copia adicional innecesaria después de que se realiza el mapeo.
El [...array].map(...) tiene una pequeña diferencia, debido al tercer parámetro pasado en map ( el propio array ).
Y como se mencionó en otro comentario, por @chazsolo, este caso manejará casos en los que la variable de array no es una matriz, por lo que no tiene el método de map , pero se puede iterar y la extensión creará una matriz a partir de ella.