const x = [new Date(), 1663761716, (new Date()).toJSON()];
const y = x.map((v) => new Date(v));
console.log(y);
El código anterior transforma una matriz de Fecha, número, cadena en una matriz de 3 Fechas.
Mi pregunta es la segunda línea. Por supuesto, ya es lo suficientemente corto, pero se siente estúpido llamar a una función en un lambda con el mismo parámetro. Debería haber algo como:
const y = x.map(Date.constructor);
Pero esto no funciona. ¿Hay alguna forma de pasar un constructor como parámetro?
Desafortunadamente, no hay un atajo para ello. Lo que tiene es lo que debe hacer (ya sea directamente en línea de esa manera, o una función con nombre reutilizable que lo haga). Hay dos razones para eso:
Debido a la necesidad de new . No hay forma de decir al map "aquí está Date , pero llámalo usando new en lugar de simplemente llamarlo normalmente" (aparte de lo que estás haciendo, usando una función de contenedor). (Hubo una vez una propuesta sobre una forma de hacerlo, pero nunca progresó). Y necesita llamar a Date usando new para su caso de uso; llamar a Date sin new devuelve una representación de cadena de la fecha, no un objeto Date .
Porque map pasa tres argumentos a la función de devolución de llamada, y Date trata la llamada con tres argumentos de manera diferente a como trata la llamada con un argumento. Desea la versión de un argumento en su caso. Consulte las respuestas a la pregunta aquí para obtener detalles (esa pregunta obliga a parseInt , pero es el mismo problema: la función hace cosas diferentes según la cantidad de argumentos que se proporcionen).