我已经编写了一个函数来在三个链接之间放置“,”和“和” 我怎么能减少if else语句。 在javascript中,如果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();
}
}
答案 0 :(得分:4)
我认为每个人都在以错误的方式看待这个问题。它不是简化if
,而是关于以语法顺序插入“,”和“和”分隔符的算法。
此问题的任何解决方案都应允许任意数量的项目(不仅仅是指定的3项)。否则,如果规范发生变化,您可能会获得大量if
次测试。当然更可重复使用(即如果业务需求发生变化)。
我收集的意图是,在这个例子中,提供一个显示这些选项的显示:
所以规则是:
所以基本上对于n> 1,最后一个分隔符是“和”,所有其他分隔符是“,”。这个简单的规则可以应用于任意数量的项目。
您只需计算非零项目的数量即可获得此效果。 正如我在评论中提到的,将您的数据放在一个数组中,这样您就可以简单地迭代它。这意味着您的输出字段也应该在一个数组中,因此您只能按顺序显示所需的输出字段。
如果您要提供HTML示例,请尽快提供代码,但您应该能够从这些简化的规则中自行解决这个问题。:)
答案 1 :(得分:1)
您可以使用与代码的then块对应的函数发出错误, 然后像这样计算数组的索引:
$index = 4*(signCount%2) + 2*(initCount%1) + (otherCount%2);
$then[$index]();
答案 2 :(得分:0)
更新:更简单,更简单的解决方案就是连接3个变量(1表示true,0表示false):
var mycode = "" + (signCount) ? "1":"0" + (initCount)?"1":"0" + (otherCount)?"1":"0"; // Concatenate as string
switch(mycode) {
case "111":
init_class.html(' and ').fadeIn();
sign_class.html(' , ').fadeIn();
break;
case "110":
init_class.html('').fadeOut();
sign_class.html(' and ').fadeIn();
break;
case "101":
init_class.html('').fadeOut();
sign_class.html(' and ').fadeIn();
break;
case "100":
init_class.html('').fadeOut();
sign_class.html('').fadeOut();
break;
case "011":
init_class.html(' and ').fadeIn();
sign_class.html('');
break;
case "010":
init_class.html('').fadeOut();
sign_class.html('').fadeOut();
break;
case "001":
init_class.html('').fadeOut();
sign_class.html('').fadeOut();
break;
}
原始回答:这样可以更轻松地遵循并注意可能出现的错误:
if (signCount) {
if(initCount) {
if(otherCount) {
init_class.html(' and ').fadeIn();
sign_class.html(' , ').fadeIn();
}
else {
init_class.html('').fadeOut();
sign_class.html(' and ').fadeIn();
}
}
else {
if(otherCount) {
init_class.html('').fadeOut();
sign_class.html(' and ').fadeIn();
}
else {
init_class.html('').fadeOut();
sign_class.html('').fadeOut();
}
}
}
else {
if (initCount) {
if(otherCount) {
init_class.html(' and ').fadeIn();
sign_class.html('');
}
else {
init_class.html('').fadeOut();
sign_class.html('').fadeOut();
}
}
else {
if(otherCount) {
init_class.html('').fadeOut();
sign_class.html('').fadeOut();
}
}
}
除此之外,我担心没有简单的方法来简化这个结。
答案 3 :(得分:0)
试试这个。我刚刚使用了||对于某些条件,因为他们无论如何都在做同样的工作。
特别是这份工作
init_class.html('').fadeOut();
sign_class.html(' and ').fadeIn();
和这份工作
init_class.html('').fadeOut();
sign_class.html('').fadeOut();
在您的代码中多次调用。所以我只使用||对于那些条件。
if ((signCount != 0 && initCount != 0 && otherCount == 0) || (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) || (signCount == 0 && initCount != 0 && otherCount == 0) || (signCount == 0 && initCount == 0 && otherCount != 0))
{
init_class.html('').fadeOut();
sign_class.html('').fadeOut();
}
答案 4 :(得分:0)
这个选项怎么样?
$arr = array(
array( 1, 1, 1 ), array( 1, 1, 0 ), array( 1, 0, 0 ), array( 0, 0, 0 ),
array( 0, 0, 1 ), array( 0, 1, 1 ), array( 1, 0, 1 ), array( 0, 1, 0 )
);
$option = array_search( array($signCount?1:0, $initCount?1:0, $otherCount?1:0 );
switch( $option, $arr ) ) {
case 0:
init_class.html(' and ').fadeIn();
sign_class.html(' , ').fadeIn();
break;
case 1:
case 6:
init_class.html('').fadeOut();
sign_class.html(' and ').fadeIn();
break;
case 2:
case 4:
case 7:
init_class.html('').fadeOut();
sign_class.html('').fadeOut();
break;
case 3: // none
break;
case 5:
init_class.html(' and ').fadeIn();
sign_class.html('');
break;
}