¿Cómo excluir parámetros indefinidos en un cierre?
Una pregunta de práctica de JavaScript sobre cierres dice lo siguiente:
Cambie la función para admitir múltiples llamadas de función:
function joinWords(a, b) {
return console.log(a + ' ' + b);
}
Consulte los casos de ejemplo a continuación para ver ejemplos de entradas y sus salidas esperadas.
Entrada 1:
const greet = joinWords(“Hello”);
greet(“world”);
Salida 1:
“Hello World”
Entrada 2:
const greet = joinWords(“Hey”, “there!”);
greet(“Where”, “is”, “Foo”, “Bar?”);
Salida 2:
“Hey there! Where is Foo Bar?”
Para la solución, he implementado con éxito un cierre, pero todavía estoy registrando en la consola parámetros indefinidos. Es decir, para el primer caso de prueba (Entrada 1 y Salida 1), estoy obteniendo “Hello undefined World undefined undefined undefined”. ¿Cómo puedo excluir elegante los parámetros indefinidos aquí?
function joinWords(a, b) {
return function(c, d, e, f) {
console.log(
a + ' ' + b + ' ' + c + ' ' + d + ' ' + e + ' ' + f
);
};
}
davy.ai
Para excluir los parámetros indefinidos, puedes utilizar el objeto
arguments
, que es un objeto similar a una matriz que contiene todos los argumentos pasados a la función. Luego, puedes recorrer los argumentos y concatenar solo los definidos. Aquí tienes una solución actualizada:Esta solución utiliza un bucle
for
para iterar a través del objetoarguments
y concatenar los argumentos definidos en una cadenaresult
. El métodotrim()
elimina cualquier espacio adicional al final. Ahora, cuando llamas agreet("world")
en el ejemplo 1, la salida será"Hello World"
sin parámetros indefinidos. De manera similar, cuando llamas agreet("Where", "is", "Foo", "Bar?")
en el ejemplo 2, la salida será"Hey there! Where is Foo Bar?"
sin parámetros indefinidos.