2016-02-25 59 views
0

所以,我有以下JS:JS写重复代码的功能

}else if (name== pac + 'steve/'){ 
    var cat_id = '42'; 
    CAT_L('steve'); 
}else if (curret_url == pac + 'mike/'){ 
    var cat_id = '43'; 
    CAT_L('mike'); 
}else if (curret_url == pac + 'sean/'){ 
    var cat_id = '44'; 
    CAT_L('sean'); 
} 

这里,正在改变的仅仅是名称和编号。

我很难想出一个函数来重用这样的重复代码。

有人能帮助我如何想出一个函数来简单地重复相同的代码?

感谢

+0

为什么不使用地图? – mido

+0

你能告诉我一个示例吗?谢谢 – HEYHEY

+0

'pac'的内容是什么? – fcalderan

回答

3

,你可以这样做:

var valMap = { 
    'steve': '42', 
    'mike':'43', 
    'sean': '44' 
}; 

var name = curret_url.slice(pac.length); 
cat_id = valMap[name]; 
CAT_L(name); 
+0

谢谢。学到了新的东西:) – HEYHEY

+0

好吧,你可以用'map'替换'if'条件。 'if'语句可以让你一次执行一个条件,但'map'将执行所有这些条件。如果你正在循环,然后调用该函数,'map'是有用的,否则它是没有意义的。 –

+0

@HarryBomrah我不同意,对于初学者来说,'map'并不意味着循环,这就是'array'的意思,除此之外,事情更简洁,因为所有情况下都会做类似的事情...... – mido

2

你可以使用正则表达式来提取名称: -

var curret_url = "/foomike/" 
 

 
var obj = { 
 
    steve: '42', 
 
    mike: '43', 
 
    sean: '44' 
 
}; 
 

 
var val = /\/foo(\w+)/.exec(curret_url); // pac=/foo 
 

 
if (val.length && obj.hasOwnProperty(val[1])) { 
 
    var cat_id = obj[val[1]]; 
 
    alert(val[1]); 
 
    alert(cat_id); 
 
}

0

所有伟大的解决方案,在这里是我较长的通用方式... :)

var pac = "", 
    CAT_L = function(){}; 

function Record(pac, config, callback) { 

    var key; 
    for (key in config) { 
     this[pac + key] = (function(key) { 
       return function() { 
        return callback.call(this, key, config[key]); 
       } 
      })(key); 
    } 

    return this; 

}; 

Record.prototype.get = function(key) { 
    return valMap[key].call(this); 
} 

valMap = new Record(pac, { 
    'steve': '42', 
    'mike':'43', 
    'sean': '44' 

}, function(key, val) { 
    cat_id = val; 
    CAT_L(key); 
}); 


valMap.get(pac + 'steve');