我有一个仅在定义指定变量时才应用的函数。一旦定义了该变量,它就会遍历一组嵌套数组,以生成用户发送到的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';
}
}
}
}
}
答案 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';
这样,如果没有匹配,将执行外部重定向。