在javascript中创建数组而不是if…else

在javascript中创建数组而不是if…else,javascript,arrays,Javascript,Arrays,所以我对这个简单的边栏小工具有一个问题,我将在转换值时开发它(主要是在javascript中)。现在我的代码按原样工作,但重复使用了太多类似代码行(2000多行),这对于将来调试和更改某些代码来说是一件可怕的事情 所以我试着用数组来减少代码行,但是当我这样做的时候,我无法让它工作。这是我的作品样本 function globVar() { var AIC = 4.11; //random value var BIC = 3.42; var CIC = 58.17;

所以我对这个简单的边栏小工具有一个问题,我将在转换值时开发它(主要是在javascript中)。现在我的代码按原样工作,但重复使用了太多类似代码行(2000多行),这对于将来调试和更改某些代码来说是一件可怕的事情

所以我试着用数组来减少代码行,但是当我这样做的时候,我无法让它工作。这是我的作品样本

function globVar() 
{

    var AIC = 4.11;  //random value
    var BIC = 3.42; 
    var CIC = 58.17;
    var DID = 441.16;
}

function doCalc() {
    globVar();
    var cellX = document.getElementById("sel1").value;
    var cellY = document.getElementById("sel2").value;

    if (cellX == "REC" && cellY == "AIC") {     
        var x = document.getElementById("value1").value;            
        var y = x * AIC;
        var y2 = y.toFixed(2);
        document.getElementById("value2").value = y2;
    }

    if (cellX == "REC" && cellY == "BIC") {
        var x = document.getElementById("value1").value;            
        var y = x * BIC);
        var y2 = y.toFixed(2);
        document.getElementById("value2").value = y2;
    }

    if (cellX == "REC" && cellY == "CIC") {
        var x = document.getElementById("value1").value;            
        var y = x * (1 / CIC);
        var y2 = y.toFixed(2);
        document.getElementById("value2").value = y2;
    }
}
这段代码可以工作,但要完成这项工作,超过50个变量的时间太长,不能与if-else一起使用,所以我尝试使用数组。。代码如下

globvar();
var cellX = document.getElementById("sel1").value;
var cellY = document.getElementById("sel2").value;

var unit1 = ["AIC", "BIC"];
var unit100 = ["CIC","DID"];

if (cellX == "REC") {
    for (var i=0; i<2; i++) {
        arrUnit = unit1[i];

        if (cellY == arrUnit) {
            var x = document.getElementById("value1").value;            
            var y = x * (1 / arrUnit);
            var y2 = y.toFixed(2);
            document.getElementById("value2").value = y2;

        }
    }

    for (var j=0; j<2; j++) {

        arrUnit = unit100[j];

        if (cellY == arrUnit) {
            var x = document.getElementById("value1").value;            
            var y = x * (1 / arrUnit);
            var y2 = y.toFixed(2);
            document.getElementById("value2").value = y2;
        }
    }
}
globvar();
var cellX=document.getElementById(“sel1”).value;
var cellY=document.getElementById(“sel2”).value;
变量单位1=[“AIC”,“BIC”];
var unit100=[“CIC”,“DID”];
如果(cellX==“REC”){

对于(var i=0;i免责声明:在纯javascript中计算带小数的数字是一个糟糕、非常糟糕的主意!

您可以使用或任何其他已正确使用小数的数学库


您正在寻找的东西-称为“

您的代码可能如下所示:

var rates = { // here where your constants should be defined
    'AIC': 0,
    'BIC': 0,
    'CIC': 0,
};

var actions = {
    'REC': function (x, rate) {
        return x * (1 / rate);
    },
    'XEC': function (x, rate) {
        return x * rate;
    }
};


function doCalc() {
    globVar();
    var cellX = document.getElementById("sel1").value;
    var cellY = document.getElementById("sel2").value;
    var x = document.getElementById("value1").value;
    var y = actions[cellX](x, rates[cellY]);

    document.getElementById("value2").value = y.toFixed(2);
}
function resetRates() {

        globVar();
        // To refresh rates with latest value

        var excel = new ActiveXObject("Excel.Application");
        excel.Visible = false; //false to hide while true to debug
        var excel_file = excel.Workbooks.Open("//path/to/excelfiles/rates.xls");
        var excel_sheet = excel_file.Worksheets("Sheet1");

        rates['AIC'] = excel_sheet.Cells(3,7).Value;
        rates['BIC'] = excel_sheet.Cells(4,7).Value;
        rates['CIC'] = excel_sheet.Cells(5,7).Value;
        rates['DID'] = excel_sheet.Cells(6,7).Value;
        rates['EID'] = excel_sheet.Cells(7,7).Value;
        rates['FID'] = excel_sheet.Cells(8,7).Value;
        rates['GIE'] = excel_sheet.Cells(9,7).Value;
        rates['HIE'] = excel_sheet.Cells(10,7).Value;
        rates['IIE'] = excel_sheet.Cells(11,7).Value;


        excel.Quit();
}
在这里,重置率应该是什么样子:

var rates = { // here where your constants should be defined
    'AIC': 0,
    'BIC': 0,
    'CIC': 0,
};

var actions = {
    'REC': function (x, rate) {
        return x * (1 / rate);
    },
    'XEC': function (x, rate) {
        return x * rate;
    }
};


function doCalc() {
    globVar();
    var cellX = document.getElementById("sel1").value;
    var cellY = document.getElementById("sel2").value;
    var x = document.getElementById("value1").value;
    var y = actions[cellX](x, rates[cellY]);

    document.getElementById("value2").value = y.toFixed(2);
}
function resetRates() {

        globVar();
        // To refresh rates with latest value

        var excel = new ActiveXObject("Excel.Application");
        excel.Visible = false; //false to hide while true to debug
        var excel_file = excel.Workbooks.Open("//path/to/excelfiles/rates.xls");
        var excel_sheet = excel_file.Worksheets("Sheet1");

        rates['AIC'] = excel_sheet.Cells(3,7).Value;
        rates['BIC'] = excel_sheet.Cells(4,7).Value;
        rates['CIC'] = excel_sheet.Cells(5,7).Value;
        rates['DID'] = excel_sheet.Cells(6,7).Value;
        rates['EID'] = excel_sheet.Cells(7,7).Value;
        rates['FID'] = excel_sheet.Cells(8,7).Value;
        rates['GIE'] = excel_sheet.Cells(9,7).Value;
        rates['HIE'] = excel_sheet.Cells(10,7).Value;
        rates['IIE'] = excel_sheet.Cells(11,7).Value;


        excel.Quit();
}

如果您的函数对所有值都是相同的(
y=x*
),您可以这样做

var v = [];
v['REC'] = [];

function globVar() 
{
    var rec = v['REC'];
    rec['AIC'] = 4.11;  //random value
    rec['BIC'] = 3.42; 
    rec['CIC'] = 1 / 58.17;
    rec['DID'] = 441.16;
}

globVar();

function doCalc() {
    var cellX = document.getElementById("sel1").value;
    var cellY = document.getElementById("sel2").value;

    var x = document.getElementById("value1").value;
    var y = x * v[cellX][cellY];
    var y2 = y.toFixed(2);
    document.getElementById("value2").value = y2; 
}

否则,您也需要一个带有函数的数组。

只是文章中的一个输入错误:
var y=x*BIC);
NaN
通常发生在您尝试混合使用字符串和数字进行计算时,请注意,输入元素的值是字符串。啊,我明白了。难怪我无法从globVar()获得值总之,总是会导致NaN。那么我应该怎么做才能使用数组从中获取值呢?我不知道,因为在您的代码中,您实际上正在执行例如:
var y=x*(1/'AIC');
,我不知道,您在
#value1
#value1中输入了什么(只是数字)由用户输入,脚本将自动计算并在#value2中显示结果。我不确定即使是if-else代码如何工作。您在函数中定义了AIC、BIC等,它们没有全局范围。哦,谢谢。不幸的是,这仍然是一个问题。在50个变量中只减少大约200行代码。我忘记了我的脚本只有两个公式,而且被反复使用,因此我想使用数组来简化它。@flagstar,你能提供完整的代码示例吗?因为它不清楚如何优化它。这是另一个示例。我仍然会缩短它,因为所有内容都是一样的,重复一行。@Teemu,请检查链接,provi由问题作者在下面的评论中编辑。pastebin.com/SvvXmnhr