Write a function createCounter. It should accept an initial integer init. It should return an object with three functions.
The three functions are:
increment() increases the current value by 1 and then returns it.
decrement() reduces the current value by 1 and then returns it.
reset() sets the current value to init and then returns it.
寫一個叫做 createCounter 函式,當它接受一個初始整數 init 作為參數時 ,該函式應該回傳一個包含三個函式的物件。 這三個函式如下: increment() :將當前值增加 1,並回傳它。 decrement() :將當前值減 1,並回傳它。 reset() :將當前值設置為 init,並回傳它。
Example 1:
Input: init = 5, calls = ["increment","reset","decrement"] Output: [6,5,4]
Example 2:
Input: init = 0, calls = ["increment","increment","decrement","reset","reset"] Output: [1,2,1,0,0]
solution:
宣告一個變數 value,並用來儲存初始的值,接著:
– 定義 increment 箭頭函式: () => ++value ,因表示該函式沒有參數,只需執行 ++value 運算。
– 定義 reset 箭頭函式: () => value = init ,因表示該函式沒有參數,只需回傳 value 的初始 init 值。
– 定義 decrement 箭頭函式: () => –value 因表示該函式沒有參數,只需執行 –value 運算。
最後將 increment、reset 和 decrement 這三個函式封裝在一個物件中,並將該物件作為 createCounter 函式的回傳值。
Code 1: BigO(1)
var createCounter = function(init) { let value = init const increment = () => ++value const reset = () => value = init const decrement = () => --value return { increment, reset, decrement }; };
FlowChart:
Example 1
const counter = createCounter(5) counter.increment(); // 6 counter.reset(); // 5 counter.decrement(); // 4
Example 2
const counter = createCounter(0) counter.increment(); // 1 counter.increment(); // 2 counter.decrement(); // 1 counter.reset(); // 0 counter.reset(); // 0