我真的很抱歉,如果这是愚蠢的,但我到处搜索,但我没有找到任何关于如何去做的提示。 我有这个变量
var id = $('#sometextfield').val();
此文本字段值是动态生成的,例如
<input type="text" name="id" id="id" value="<?php echo $_get[something];?>" />)
这里的问题是我有一个if条件说
if(id == 100 || id ==120) {
// i have these variables
var mulitiplier = 0.005
var price = (some alog) * mulitiplier;
// do some very long piece of code
}
else if (id == 200 || id == 220) {
// Then i have these variables
var mulitiplier = 0.090;
var price = (some alog) * mulitiplier;
// Do the same very long piece of code(its practically the same thing as
// the first if statement and the only change is the ariable multiplier)
}
这是有效的,但除此之外没有任何方法可以不重复同样的事情。我不喜欢它的外观。 非常感谢提前..
答案 0 :(得分:3)
function long_piece(multiplier){
... long piece of code....
}
var MultMap = {100:0.005, 120:0.005, 200:0.009, 220:0.009}
long_piece(MultMap[id])
答案 1 :(得分:3)
只需将很长一段代码抽象出一个以multiplier
和price
值为参数的函数。例如
var theCode = function (multiplier, price) {
do some very long piece of code
};
if(id == 100 || id == 120) {
var mulitiplier = 0.005
var price = (some alog) * mulitiplier;
theCode(multiplier, price);
} else if (id == 200 || id == 220) {
var mulitiplier = 0.090;
var price = (some alog) * mulitiplier;
theCode(multpilier, price);
}
注意:您应该考虑在parseInt
和id
的初始化中使用===
来比较此类代码的值而不是==
。
答案 2 :(得分:1)
简单,只需将“非常长的代码”放入自定义函数中,接受1个参数,即乘数。
答案 3 :(得分:0)
在函数中包装长代码并重写代码会更有效(也更可读),我想:
var id100120 = id === 100 || id === 120,
id200220 = id === 200 || id === 220,
multiplier = id100120 ? 0.005 : id200220 ? 0.090 : null,
price = (/*some alog*/) * mulitiplier,
longPieceOfCode = function(){ /* your code here ... */ };
if (id100120 || id200220) {
longPieceOfCode();
}
如果id
是字符串值,您还可以使用以下内容:
var id100120 = '[100][120]'.indexOf('['+id+']')>-1,
id200220 = '[200][220]'.indexOf('['+id+']')>-1
或(除了ie&lt; 9我认为)
id = Number(id);
var id100120 = [100,120].indexOf(id) > -1,
id200220 = [200,220].indexOf(id) > -1