【问题标题】:How can I write this javascript loop better way我怎样才能更好地编写这个javascript循环
【发布时间】:2014-09-19 00:48:27
【问题描述】:

我有这个 JS 代码

if (parseInt(counter.text(), 10) > 0) {
    counter.text(parseInt(counter.text(), 10) - 1);
}

if (parseInt(counter.text(), 10) < 1) {
    counter.attr('data-active', true);
}

这只是检查计数是否 > 0 然后递减它,如果递减后 == 0 然后隐藏它。

我正在寻找更好的方法来编写它。我总是陷入关于非高效编码的代码审查;)

【问题讨论】:

  • 您发布的代码中没有循环。
  • 另外:您获取相同的内容两次或三次,然后将相同的内容传递给parseInt() 两次(或三次)。这是代码审查中的一个非常容易的目标。
  • 另外:“更好”通常是开放式的,除非您有特定问题。您的请求似乎更适合codereview.stackexchange.com

标签: javascript loops


【解决方案1】:

我认为这将为您提供相同的行为,而无需花费太多时间进行解析。

var value = parseInt(counter.text(), 10);
if(value > 0) {
    value--;
    counter.text(value);
}
if(value < 1) {
    counter.attr('data-active', true);
}
  • 创建一个变量来保存解析结果。这样可以减少代码重复,并避免重复执行相同的工作。
  • 您在检查值之前减少了在 counter.text() 中找到的值,因此我正在减少变量的值以保持相同的行为。

请注意,您可能可以更好地提高 循环 的性能,但您尚未将循环包含在 OP 中。

【讨论】:

  • 我可以使用一个 if 循环而不是两个。我也想先把第二个 if 放在里面,因为这种情况只有在 count ==1 并且我们递减它然后我们想隐藏它时才发生。如果 count 已经为零,那么我认为我们不需要隐藏,因为元素已经隐藏了。抱歉,我没有循环。我在函数中有这个调用来减少计数。我只想在递减后检查 ==0,然后我们也将其隐藏。而是显示 0
  • 1: if 不是循环。它是一个分支。 2:是的,如果您知道计数器不能被任何其他外部源赋予负数,那么您可以安全地将第二个 if 块放在第一个和末尾有类似的行为。如果是这种情况,您似乎应该检查是否value == 0,纯粹是为了让您的意图更加明显。
  • 你是对的,这就是我在 CR 中获得 cmets 的地方。我很困惑要检查哪个条件
  • 检查使您尝试做什么的条件最明显。想象一下,您正在用简单的语言向某人解释您希望您的代码做什么。然后根据您解释的内容构建您的代码。这是一门艺术,但如果你继续努力,你可以改进。
猜你喜欢
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 2020-02-20
  • 2013-09-28
  • 2017-06-25
  • 2020-06-07
相关资源
最近更新 更多