es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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
    );
  };
}
Tags:  , , , ,

Answer

  1. Avatar for 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:

    function joinWords(a, b) {
      return function() {
        let result = '';
        for (let i = 0; i < arguments.length; i++) {
          if (arguments[i] !== undefined) {
            result += arguments[i] + ' ';
          }
        }
        console.log(a + ' ' + b + ' ' + result.trim());
      };
    }
    

    Esta solución utiliza un bucle for para iterar a través del objeto arguments y concatenar los argumentos definidos en una cadena result. El método trim() elimina cualquier espacio adicional al final. Ahora, cuando llamas a greet("world") en el ejemplo 1, la salida será "Hello World" sin parámetros indefinidos. De manera similar, cuando llamas a greet("Where", "is", "Foo", "Bar?") en el ejemplo 2, la salida será "Hey there! Where is Foo Bar?" sin parámetros indefinidos.

Comments are closed.