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

Leetcode #Autoriser un appel de fonction

王林
Libérer: 2024-08-24 11:14:06
original
341 Les gens l'ont consulté

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:**


Copier après la connexion

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:**


Copier après la connexion

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



Copier après la connexion

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!

source:dev.to
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal