我如何减少其他陈述

use*_*473 2 javascript php jquery

我已经编写了一个函数来在三个链接之间放置“,”和“ and”,如果没有其他语句,我该如何减少。在javascript中,如果count不为零,我将得到count,这意味着链接必须显示,否则应该隐藏

在以下情况下

function inst_grammer()
{
var otherCount = parseInt($('.global_other_count').html());
var initCount = parseInt($('.global_init_count').html());
var signCount = parseInt($('.global_sign_count').html());

var init_class = $('.inst_init');
var sign_class =  $('.inst_sign');

if (signCount != 0 && initCount != 0 && otherCount == 0)
{
    init_class.html('').fadeOut();
    sign_class.html(' and ').fadeIn();
} else if (signCount == 0 && initCount != 0 && otherCount != 0)
{
    init_class.html(' and ').fadeIn();
    sign_class.html('');
} else if (signCount != 0 && initCount != 0 && otherCount != 0)
{
    init_class.html(' and ').fadeIn();
    sign_class.html(' , ').fadeIn();
}
else if (signCount != 0 && initCount == 0 && otherCount == 0)
{
    init_class.html('').fadeOut();
    sign_class.html('').fadeOut();
}
else if (signCount == 0 && initCount != 0 && otherCount == 0)
{
    init_class.html('').fadeOut();
    sign_class.html('').fadeOut();
}
else if (signCount == 0 && initCount == 0 && otherCount != 0)
{
    init_class.html('').fadeOut();
    sign_class.html('').fadeOut();
}
else if (signCount != 0 && initCount == 0 && otherCount != 0)
{
    init_class.html('').fadeOut();
    sign_class.html(' and ').fadeIn();
}
}
Run Code Online (Sandbox Code Playgroud)

Gon*_*ing 5

我认为每个人都在错误地看待这个问题。它不是关于简化if',而是关于在语法序列中插入“,”和“ and”分隔符的算法。

任何解决此问题的方法都应允许任何数量的项目(不仅限于指定的3个项目)。否则,if如果规格发生变化,您可能会获得数量大大增加的测试。当然更可重用(即,如果业务需求发生变化)。

在此示例中,我收集的意图是提供一个显示以下选项的显示:

  • “ a,b和c”
  • “ a和b”
  • “ a和c”
  • “ b和c”
  • “一种”
  • “ b”
  • “C”

因此规则是:

  • 如果显示项目数为1,则不显示分隔符
  • 如果显示项目的数量为2,则在项目之间显示“和”
  • 如果项目数为3,请使用“,”代替“ and”(最后一个除外)。

所以基本上对于n> 1,最后一个分隔符是“ and”,所有其他分隔符都是“,”。这个简单的规则可以应用于任何数量的项目。

您可以通过简单地计算非零项目的数量来获得此效果。 正如我在评论中提到的那样,将您的数据放入一个数组中,以便您可以简单地对其进行迭代。这意味着您的输出字段也应该位于数组中,因此您只按顺序显示所需的字段。

如果愿意提供HTML示例,很高兴提供代码,但是您应该能够从这些简化的规则中找出答案。:)