无论如何减少来自相同if语句的代码?

时间:2015-09-16 11:13:48

标签: javascript

static function sql_connect($sql_details) {
        try {
            $db = @new PDO("mysql:host={$sql_details['host']};dbname={$sql_details['db']}",
                $sql_details['user'],$sql_details['pass'],array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'',
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
            $db->exec("set names utf8");
            $db->exec("set character_set_client='utf8'");
            $db->exec("set character_set_results='utf8'");
            $db->exec("set collation_connection='utf8_bin'");
        }
        catch (PDOException $e) {
            self::fatal("An error occurred while connecting to the database. ".
                "The error reported by the server was: ".$e->getMessage());
        }
        return $db;
    }

这里我有4个if语句;它们是如何减少代码相同的。

2 个答案:

答案 0 :(得分:2)

还有很多方法可以做到这一点。这里有两种我知道的方式:

使用switch声明:

switch((arg[i].slice(0,2)) {
    case 'cl' : cl.push(arg[i]); break;
    case 'di' : di.push(arg[i]); break;
    case 'sp' : sp.push(arg[i]); break;
    case 'he' : he.push(arg[i]); break;
}

将数组放入对象并使用[]表示法:

var cl=[],di=[],sp=[],he=[];
var map = {
    cl : cl,
    di : di,
    sp : sp,
    he : he
};

for(var i=0;i<arg.length;i++){
    var key = arg[i].slice(0,2);
    if (map[key]) map[key].push(arg[i])
}

答案 1 :(得分:0)

不是因为每个数组都有单独的变量。 (尽管您可以使用switchif else来提高效果。)

但是,如果将数组作为单个对象的一部分,则可以相当多地减少if语句代码。像这样举例如:

var myArrays = {
    cl: [],
    di: [],
    sp: [],
    he: []
};

function pusher(arg) {
    for (var i = 0; i < arg.length; i++) {
        // Check to ensure length is at least 2 characters.
        if(arg[i].length < 2)
            continue;

        var a = arg[i].slice(0, 2);

        // Check to ensure value exists in myArrays.
        if(myArrays[a])
            myArrays[a].push(arg[i]);
    }
}

当然我已经添加了额外的验证,所以如果最终仍有大量的线条。但它可以重复使用并满足您的需求。

Here is a working example

如果你只有4个数组那么这很好,但也许这是一个减少的例子?如果是这种情况,您可能需要考虑动态创建数组。作为一个简单的例子:

var myArrays = {};
myArrays['cl'] = [];
myArrays['di'] = [];
// etc... 

您可以使用此方法创建任意数量的内容,如果需要,甚至可以将其基于某些列表。