For循环

时间:2017-08-15 17:18:18

标签: javascript for-loop if-statement

我有一个仅在定义指定变量时才应用的函数。一旦定义了该变量,它就会遍历一组嵌套数组,以生成用户发送到的URL。我在if语句的逻辑中添加了一个else语句,这样如果条件不满足,用户就会被发送到一个默认的URL,其中说明了对不起,没有找到任何项目。"但是,由于它是循环遍历不匹配的项以查找所执行的项的循环,因此它会在循环找到匹配之前始终应用else语句。

是否有更好的语法?

function applyUrl() {

var locSelect = localStorage.getItem("loc");
var positSelect = localStorage.getItem("posit");
var userSelect = locSelect + " - " + positSelect;
if(localStorage.getItem("posit") != null){

        for (var i = 0; i < sortedArray.length; i++) {
        var stuff = sortedArray[i];
        for (var j = 0; j < stuff.length; j++) {
            if(stuff[j] === userSelect) {
                  window.location.href = stuff[1];
                }else{
                  window.location.href = 'default.html';
                }
            }

        }

    }
}

3 个答案:

答案 0 :(得分:1)

我认为最干净的方法是只在for循环之外存储一个变量,然后在完成后导航到它,如果你还没有redirUrl,也只能保持循环。

function applyUrl() {

    var locSelect = localStorage.getItem("loc");
    var positSelect = localStorage.getItem("posit");
    var userSelect = locSelect + " - " + positSelect;
    if (localStorage.getItem("posit") != null) {
        var redirUrl;    
        for (var i = 0; i < sortedArray.length && !redirUrl; i++) {
            var stuff = sortedArray[i];
            for (var j = 0; j < stuff.length && !redirUrl; j++) {
                if (stuff[j] === userSelect) {
                    redirUrl = stuff[1];
                }
            }
        }

        window.location.href = redirUrl || 'default.html';
    }
}

更好的方法是写

function applyUrl() {
    var locSelect = localStorage.getItem("loc");
    var positSelect = localStorage.getItem("posit");
    var userSelect = locSelect + " - " + positSelect;
    if (positSelect != null) {
        // must have 2 elements and contain the user selection.
        var selArray = sortedArray.find(v=>v.length >= 2 && v.indexOf(userSelect) !== -1);
        if(selArray) {
            window.location.href = selArray[1];
        } else {
            window.location.href = 'default.html';
        }
    }
}

答案 1 :(得分:0)

您应该将默认重定向移动到内部循环之外,并且仅在父循环结束时执行此操作。

function applyUrl() {   
  var locSelect = localStorage.getItem("loc");
  var positSelect = localStorage.getItem("posit");
  var userSelect = locSelect + " - " + positSelect;

  if (localStorage.getItem("posit") != null) {      
    for (var i = 0; i < sortedArray.length; i++) {
      var stuff = sortedArray[i];
      for (var j = 0; j < stuff.length; j++) {
        if (stuff[j] === userSelect) {
          window.location.href = stuff[1];
          return;
        }
      }
    }

    window.location.href = 'default.html';          
  }
}

答案 2 :(得分:0)

因为 window.location.href 重定向到另一个页面,所以您可以通过以下方式更改代码逻辑:

for (var j = 0; j < stuff.length; j++) {
    if(stuff[j] === userSelect) {
        window.location.href = stuff[1];
    }
}
window.location.href = 'default.html';

这样,如果没有匹配,将执行外部重定向。