Maison >interface Web >js tutoriel >Leetcode #Autoriser un appel de fonction

Leetcode #Autoriser un appel de fonction

王林
王林original
2024-08-24 11:14:06342parcourir

Leetcode #Allow One Function Call

Étant donné une fonction fn, renvoie une nouvelle fonction identique à la fonction d'origine sauf qu'elle garantit que fn est appelée au plus une fois.

La première fois que la fonction renvoyée est appelée, elle devrait renvoyer le même résultat que fn.
Chaque fois qu'il est appelé par la suite, il devrait renvoyer undefined.

Exemple 1 :

Entrée :

fn = (a,b,c) => (a + b + c), appelle = [[1,2,3],[2,3,6]]

Sortie :


**Explanation:**


const onceFn = once(fn);
une foisFn(1, 2, 3); // 6
une foisFn(2, 3, 6); // non défini, fn n'a pas été appelé


**Example 2:**

**Input:**

 ```fn = (a,b,c) => (a * b * c), calls = [[5,7,4],[2,3,6],[4,6,8]]```


**Output:**

 ```[{"calls":1,"value":140}]```


**Explanation:**


const onceFn = once(fn);
une foisFn(5, 7, 4); // 140
une foisFn(2, 3, 6); // non défini, fn n'a pas été appelé
une foisFn(4, 6, 8); // non défini, fn n'a pas été appelé



**Constraints:**

`calls` is a valid JSON array



1 <= appels.longueur <= 10
1 <= appels[i].length <= 100
2 <= JSON.stringify(calls).length <= 1000



*Solution*

In this case, we are required to create a higher-order function(a function that returns another function) [Read more about high-order functions here](https://www.freecodecamp.org/news/higher-order-functions-explained/#:~:text=JavaScript%20offers%20a%20powerful%20feature,even%20return%20functions%20as%20results.)

We should make sure that the original function `fn` is only called once regardless of how many times the second function is called.

If the function fn has been not called, we should call the function `fn` with the provided arguments `args`. Else, we should return `undefined`


_Code solution_



``` sh
/**
 * @param {Function} fn
 * @return {Function}
 */
var once = function (fn) {
    // if function === called return undefined, 
    // else call fn with provide arguments
    let executed = false;
    let result;

    return function (...args) {
        if (!executed) {
            executed = true;
            result = fn(...args);
            return result;
        } else {
            return undefined;
        }
    }
};

/**
 * let fn = (a,b,c) => (a + b + c)
 * let onceFn = once(fn)
 *
 * onceFn(1,2,3); // 6
 * onceFn(2,3,6); // returns undefined without calling fn
 */






          

            
        

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn