If-Else语句中循环的JavaScript

If-Else语句中循环的JavaScript,javascript,Javascript,我正在寻找一种更简单的方法来处理这些多条If-Else语句,共有几百条。我猜最好在If-Else中使用另一个For循环,但请告诉我你们的建议,谢谢 var hrefs = []; var list = document.getElementsByTagName("a"); for (var i=0; i<list.length; i++) { var hey = list[i].href; hrefs.push(hey); } if(window.location ==

我正在寻找一种更简单的方法来处理这些多条If-Else语句,共有几百条。我猜最好在If-Else中使用另一个For循环,但请告诉我你们的建议,谢谢

var hrefs = [];
var list = document.getElementsByTagName("a");
for (var i=0; i<list.length; i++) {
    var hey = list[i].href;
    hrefs.push(hey);
}

if(window.location == 'http://') {
    tileid = <?php echo $numposts.''; ?>;
} else if (window.location == hrefs[7]) {
    tileid = 0;
} else if (window.location == hrefs[8]) {
    tileid = 1;
} else if (window.location == hrefs[9]) {
    tileid = 2;
} else if (window.location == hrefs[10]) {
    tileid = 3;
} else if (window.location == hrefs[11]) {
    tileid = 4;
} else if (window.location == hrefs[12]) {
    tileid = 5;
} else if (window.location == hrefs[13]) {
    tileid = 6;
} else if (window.location == hrefs[14]) {
    tileid = 7;
} else if (window.location == hrefs[15]) {
    tileid = 8;
} else if (window.location == hrefs[16]) {
    tileid = 9;
} else if (window.location == hrefs[17]) {
    tileid = 10;
} else if (window.location == hrefs[18]) {
    tileid = 11;
} else {
    tileid = window.history.state.projid;
}
var hrefs=[];
var list=document.getElementsByTagName(“a”);
对于(var i=0;i请尝试以下方法:

var flag = false;

if (window.location == 'http://') {
    tileid = <?php echo $numposts.''; ?>;
} else {
    for (var i = 7; i <= 18; ++i) {
        if (window.location == hrefs[i]) {
             tileid = i - 7;
             flag = true; break;
        }
    }
    if (!flag) tileid = window.history.state.projid;
}
var标志=false;
如果(window.location=='http://'){
蒂莱德=;
}否则{

对于(var i=7;i您可以执行switch语句

switch(urlval){
    case 1:
     tileid = 1;
    break;

    case 2:
     tileid = 2;
    break;

    default:
     tileid = 0;
}

没有对此进行测试,我认为
i为什么
tileid=0
对应于第七个链接?只需使用算术和
-7
就可以在第一个
for
循环中使用嵌套的
for
循环,或者可以将所有的HREF放入一个对象并使用直接对象属性查找。
tileid=hrefs.indexOf(窗口位置)-7
使用switch语句仍然不能删除重复的代码,这通常是你做错事的标志如果它是一个适用于switch的实例,它不是重复的代码。你真的开发了吗?我发布了一个替代已回答问题的替代方案。他要求使用不同于ifs的方法。如果没有符合他的实际情况,那就这样吧,但这是一个非常可行的选择。不要因为你不明白而否决我。你知道这是为了什么吗?“我真的发展了吗?”你是认真问我的吗?我只说:你在复制代码。你实现切换的方式可以在一行中完成。
tileid=urlval;
,或者
tileid=(urlval!=一些我不想要的值?urlval:DEFAULT\u值)
。别这么粗鲁,我只是清楚地说你在复制代码。他确实要求了一种替代方法,但他要求了一种比使用if/else if更简单的方法。使用开关并不会使这变得更容易;只是更容易阅读,但它仍然很混乱,不易维护。此外,我想声明OP说他必须处理它通过几百次,他真的想复制/粘贴100次以上吗?使用开关并不会停止复制和粘贴(即复制代码)。如果结果表明他需要处理更多,这意味着需要更多的复制和粘贴。看看David的答案,这是我本想做的,只是常数更少,所以以后更容易更改(如果我需要的话)。所有这些都是关于思想开放、客观、分享想法和做事方法的。你的第一、第二或第三次评论绝对没有任何好处。第一次只是一句挖苦的话,然后是毫无价值的运球。走开,你在烦我!
var hrefs = {};
var list = document.getElementsByTagName("a");
for (var i=0; i<(list.length<18?list.length:18); i++) {
    hrefs[list[i]] = i;
}

if (window.location == 'http://'( {
  tileid = <?php echo $numposts.''; ?>;
} else {
  if (!hrefs[window.location]) {
    tileid = window.history.state.projid;
  } else {
    tileid = hrefs[window.location] - 7;
  }
}