Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以把代码缩短吗?_Javascript - Fatal编程技术网

Javascript 我可以把代码缩短吗?

Javascript 我可以把代码缩短吗?,javascript,Javascript,我有许多用于计算某些统计数据的函数,每次都需要重新检查该值,但这是额外的代码,使其更难读取,我是否可以将变量赋值存储在另一个函数中: function MC () { var check=document.getElementById('check').checked; var ea=Number(document.form.ea.value), ed=Number(document.form.ed.value), pa=Number(document.form.pa.valu

我有许多用于计算某些统计数据的函数,每次都需要重新检查该值,但这是额外的代码,使其更难读取,我是否可以将变量赋值存储在另一个函数中:

function MC () {
var check=document.getElementById('check').checked;

var ea=Number(document.form.ea.value),
    ed=Number(document.form.ed.value),
    pa=Number(document.form.pa.value),
    pd=Number(document.form.pd.value);

var hpSum = 0,spSum=0,eaSum=0,edSum=0,pdSum=0,paSum=0;

if(check){
    eaSum = ea + 11;
    edSum = ed + 17;
    pdSum = pd + 17;
    paSum = pa + 11;
} else {
    eaSum = ea - 11;
    edSum = ed - 17;
    pdSum = pd - 17;
    paSum = pa - 11;
}

    document.form.ea.value=eaSum;
    document.form.ed.value=edSum;
    document.form.pa.value=paSum;
    document.form.pd.value=pdSum;
};

注:我指的是变量:ea、ed、pa、pd和sum变量。

您可以尝试构建参数对象:

function MC() {
  var check = document.getElementById('check').checked,
      keys = {
        "ea":11,
        "ed":17,
        "pd":17,
        "pa":11
      }, i;
  for( i in keys) { if( keys.hasOwnProperty(i)) {
    document.form[i].value = +document.form[i].value + (check ? keys[i] : -keys[i]);
  }}
}

请注意,
+somevar
parseFloat(somevar)
的廉价快捷方式
Number(somevar)
与它创建的包装器对象不同,如果您稍后添加任何内容,它可能会干扰比较。

我将使用您自己的代码,稍微压缩一点。假设表单是表单的名称,那么跟踪哪些输入发生了更改比读取它们需要更多的代码

function MC () {
    var f= document.form,
    v= document.getElementById('check').checked? [11, 17]:[-11, -17];
    f.ea.value= Number(f.ea.value)+v[0];
    f.ed.value= Number(f.ed.value)+v[1];
    f.pa.value= Number(f.pa.value)+v[0];
    f.pd.value= Number(f.pd.value)+v[1];
}

还要注意的是,
check
是本地的,
keys
i
是全局的,这是最好的解决方案,因为我有60多件遗物,比如MC(+stats,还有一些给ea、ed、pa、pd、hp等等)?您可以将
keys
对象作为参数传递,而不是硬编码到函数中,然后您可以调用
MC
来调整您需要的任何内容。