最大限度地减少使用"许多重复if语句"

时间:2014-11-28 07:43:38

标签: javascript

我使用TONS of if语句来完成一项任务......但是......

他们中的大多数重复如下:

if (parent.getObject()=='apple') {
  if (datatype('fruit')){
    //do a
    parent.setObjectType('fruit');
  }
  else if (datatype('beverage')){
    //do a
    parent.setObjectType('beverage');
  }
}

else if (parent.getObject()=='banana') {
  if (datatype('fruit')){
    //do a
    parent.setObjectType('fruit');
  }
  else if (datatype('beverage')){
    //do a
    parent.setObjectType('beverage');
  }
}

else if (parent.getObject()=='coconut') {
  if (datatype('fruit')){
    //do a
    parent.setObjectType('fruit');
  }
  else if (datatype('beverage')){
    //do a
    parent.setObjectType('beverage');
  }
}           

else if (parent.getObject()=='Dewberry') {
  if (datatype('fruit')){
    //do a
    parent.setObjectType('fruit');
  }
  else if (datatype('beverage')){
    //do a
    parent.setObjectType('beverage');
  }
}

我是否可以尽量减少重复代码的使用? 我不想只使用if else语句行来消耗所有空格......

4 个答案:

答案 0 :(得分:1)

我不确定您的实际代码是否更加多样化,但您发布的内容可以通过

完全复制
if (['apple', 'banana', 'coconut', 'Dewberry'].some(function(fruit) {
    return parent.getObject()==fruit;
}) {
    var type = ['fruit', 'beverage'].find(datatype);
    if (type) {
       //do a
       parent.setObjectType(type);
    }
}

find函数类似于以下内容

Array.prototype.find = function(predicate, context) {
    for (var i=0; i<this.length; i++)
        if (predicate.call(context, this[i], i))
            return this[i];
    return null;
};

答案 1 :(得分:0)

如果没有看到更多代码,您可以使用以下内容:

function doTask(a, b) {
    var as_string = a + ";" + b;

    switch (as_string) {
        case "1;1":
            //code when a=1 and b=1
                break;
        case "1;2":
            //code when a=1 and b=2
                break;
    }
}

var a = 1;
var b = 1;

doTask(a, b);

答案 2 :(得分:0)

您可以简单地使用The switch Statement,在您有许多可能值的情况下效率更高:

switch (parent.getObject()) {
        case "apple":
            switch (datatype) {
                case "fruit":
                  //Task //do task a
                  //do task b with value 1
                  break;
                case "beverage":
                  //do task a
                  //do task b with value 2
                  break;
            }

            break;
        case "banana":
            // Task a with ...
            break;
       // And put all your possible values
 }

您只需要管理parent.getObject()datatype的可能值。

答案 3 :(得分:0)

根据您的代码,您可能会或可能无法减少if语句。

例如,如果要添加从0到n的奇数,则从0到n循环,并使用if语句检查数字是否为奇数。但是,如果你碰巧知道高斯的规则1/2 * n *(n + 1),你可以在一行中计算这个值而不需要任何循环或条件语句(通过删除k(k + 1); k偶数)。