30 Days挑战赛上的第3号是#2665,计数器II。这项挑战主要是最后一天的附加组件,因此请务必在#2620上查看my post以获取概念详细信息。
过程
给出的说明非常简单。
写一个函数
createCounter
。它应该接受初始整数init
。它应该返回具有三个函数的对象。这三个功能是:
increment()
将当前值增加1,然后返回。
decrement()
将当前值降低1,然后返回。
reset()
将当前值设置为init,然后将其返回。
还包括一些直接测试。
const counter = createCounter(5)
counter.increment(); // 6
counter.reset(); // 5
counter.decrement(); // 4
我们基本上正在处理以前挑战的荣耀版本。我们要做的就是以相同的方式编写它,但是随着reset
和decrement
函数的添加。两者都易于实现,但我们将从我们拥有的东西开始。
让我们编写一个具有基本功能的函数,返回对象中包含的increment
函数。
function createCounter(init) {
let i = 0;
return {
increment: () => init + ++i
}
}
我们声明一个私有变量i
,并返回带有increment
函数的对象,该函数将i
增加1并返回新值。
但是,在最后一个挑战中,您使用了
i++
,而不是++i
。有什么交易?
这是因为在最后一个问题中,我们需要计数器才能在第一次被调用时返回init
。对于此功能,我们需要它始终为 embly 返回init
加上i
的增量值。由于++i
返回新值,就像第一次添加1时,第二次,第二次等等。
减少逻辑将使用几乎相同的结构。
function createCounter(init) {
let i = 0;
return {
increment: () => init + ++i,
decrement: () => init + --i
}
}
如果您了解--i
与++i
相同,这应该是有道理的,它只是以相反的方式起作用。
现在我们编写了reset
函数,我们告诉我们设置将返回回到init
的值。我们是如何第一次完成的?通过将i
设置为0。
function createCounter(init) {
let i = 0;
return {
increment: () => init + ++i,
decrement: () => init + --i,
reset: () => {
i = 0;
return init;
}
}
}
这就是解决方案。
结论。
增加操作员可能会令人困惑。一旦学习了作弊表的工作方式,解决问题的解决方案就开始变得有意义。
i++
-增量i
然后返回i - 1
++i
-增量i
然后返回i
i--
-降低i
然后返回i + 1
--i
-降低i
然后返回i
如果您发现这个有用,请务必在帖子上留下ð,而在Github repo上留下ð!
关注更多LC内容:)