我有一个仅在定义指定变量时才应用 onclick 的函数。一旦定义了该变量,它就会循环访问一组嵌套数组以生成用户发送到的 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';
}
}
}
}
}
最佳答案
我认为最简洁的方法是在 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';
}
}
}
关于javascript - For 循环内的 If/Else 语句所需的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45698062/