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

Leetcode #Allow One Function Call

王林
Lepaskan: 2024-08-24 11:14:06
asal
341 orang telah melayarinya

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


Salin selepas log masuk

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


Salin selepas log masuk

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



Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan