Rumah >hujung hadapan web >tutorial js >Leetcode #Allow One Function Call

Leetcode #Allow One Function Call

王林
王林asal
2024-08-24 11:14:06342semak imbas

Leetcode #Allow One Function Call

Memandangkan fungsi fn, kembalikan fungsi baharu yang sama dengan fungsi asal kecuali ia memastikan fn dipanggil paling banyak sekali.

Kali pertama fungsi yang dikembalikan dipanggil, ia sepatutnya mengembalikan hasil yang sama seperti fn.
Setiap kali ia dipanggil, ia akan kembali tidak ditentukan.

Contoh 1:

Input:

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

Output:


**Explanation:**


konst sekaliFn = sekali(fn);
onceFn(1, 2, 3); // 6
sekaliFn(2, 3, 6); // undefined, fn tidak dipanggil


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


konst sekaliFn = sekali(fn);
sekaliFn(5, 7, 4); // 140
onceFn(2, 3, 6); // undefined, fn tidak dipanggil
sekaliFn(4, 6, 8); // undefined, fn tidak dipanggil



**Constraints:**

`calls` is a valid JSON array



1 <= panggilan.panjang <= 10
1 <= panggilan[i].panjang <= 100
2 <= JSON.stringify(panggilan).panjang <= 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
 */






          

            
        

Atas ialah kandungan terperinci Leetcode #Allow One Function Call. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn