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.

Ejecutando reduce en un conjunto de funciones Booleanas. Siempre devuelve verdadero y no se puede encontrar una forma de salir del método reduce si una función devuelve falso.

Se supone que debo crear una función que tenga dos entradas: una matriz de funciones booleanas y un valor para ejecutar cada una de esas funciones. Se supone que debo devolver un valor booleano que indique si todas las funciones devuelven verdadero o no. Si al menos una de las funciones devuelve falso, la función ‘reduce’ debe devolver falso.

El problema que tengo es que incluso si una de las funciones se evalúa como falsa y el acumulador se establece en falso, si hay otra función en la matriz después de ella que da como resultado un valor verdadero, entonces devuelve verdadero incluso si la función anterior era falsa.

Leí un poco y aparentemente no hay realmente una forma de salir de un método ‘reduce’ en ejecución.

Aquí están los casos de prueba que conforman la matriz de funciones, así como dos llamadas a la función:

‘isOdd’ comprueba si el número es impar.
‘isPositive’ comprueba si el número es positivo.
‘multipleOfFive’ comprueba si el número es múltiplo de cinco.

He intentado varias variaciones de mi función, pero sin éxito. Tan pronto como establezco el acumulador en falso, volverá a ser verdadero con la siguiente función en la matriz (hablando de la segunda llamada de función con -25) y no puedo averiguar cómo salir de ‘reduce’ y devolver false una vez que encuentro un resultado falso al ejecutar las funciones!

¡Gracias por cualquier consejo o ayuda!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para “crear una función que tenga dos entradas: un array de funciones booleanas y un valor para ejecutar cada una de esas funciones. Se supone que debo retornar un valor booleano que indique si todas las funciones dan verdadero. Si al menos una de las funciones da falso, reduce debe retornar falso. ”

    El problema con la implementación actual es que siempre retorna verdadero si alguna de las funciones retorna verdadero, incluso si una función anterior ya retornó falso. Esto se debe a que tan pronto como cualquier función retorne verdadero, el acumulador se establece en verdadero y se mantiene así para las funciones restantes.

    Para solucionar esto, necesitamos usar una variable para mantener un registro de si alguna función ha devuelto falso, y establecer el acumulador en falso si esa variable es verdadera.

    Aquí está la implementación actualizada:

    const allClear = (funcArr, value) => {
      // iterar a través de funcArr usando reduce
      let anyFalse = false;
      return funcArr.reduce((acc, fn) => {
        if (anyFalse) {
          return false;
        } else if (fn(value) === false) {
          anyFalse = true;
          return false;
        } else {
          return true;
        }
      }, false);
    };
    

    Hemos agregado una variable anyFalse para mantener un registro de si alguna función ha devuelto falso. Dentro del callback de reduce, verificamos si anyFalse es verdadero y regresamos falso si lo es. Si la función actual devuelve falso, configuramos anyFalse en verdadero y devolvemos falso. De lo contrario, devolvemos verdadero como antes.

    Con estos cambios, la función ahora debería funcionar correctamente para los casos de prueba proporcionados, así como para cualquier otro array de funciones booleanas y valor de entrada.

Comments are closed.