如何简化多个Javascript IF语句?
我有以下JS用于运行此语句: “如果当前页面的URL包含如何简化多个Javascript IF语句?,javascript,if-statement,switch-statement,Javascript,If Statement,Switch Statement,我有以下JS用于运行此语句: “如果当前页面的URL包含STRING1,则切换ID的复选框:TOPIC1” 我的列表中有15个主题,我想优化代码,用STRING1和TOPIC1替换每个不同的主题 有人建议我使用javascript开关语句,但我不知道怎么做。这是我提出的一个转换声明 $(document).ready(function () { switch (window.location.href.indexOf("free") > -1){ case "STRING1":
STRING1
,则切换ID的复选框:TOPIC1
”
我的列表中有15个主题,我想优化代码,用STRING1
和TOPIC1
替换每个不同的主题
有人建议我使用javascript开关语句,但我不知道怎么做。这是我提出的一个转换声明
$(document).ready(function () {
switch (window.location.href.indexOf("free") > -1){
case "STRING1":
document.getElementById("TOPIC1").checked = true;
break;
case "STRING2":
document.getElementById("TOPIC2").checked = true;
break;
case "STRING3":
document.getElementById("TOPIC3").checked = true;
break;
case "STRING4":
document.getElementById("TOPIC4").checked = true;
break;
}
});
不幸的是⬆︎ 不起作用。任何帮助都将不胜感激
这里有一个您的问题是,您正在
切换正确的
或错误的
我会避免使用开关
——它比必要的时间长,并且当您忘记了中断
时,很容易造成问题。如果可以,请改用对象查找:
const stringsToIds = [
['STRING1', 'TOPIC1'],
['STRING2', 'TOPIC2'],
['STRING3', 'TOPIC3'],
];
const { href } = window.location;
const match = stringsToIds.find(([str]) => href.includes(str));
if (match) document.getElementById(match[1]).checked = true;
这样,您的代码非常简洁,易于理解。您的问题是,您正在切换正确的或错误的
我会避免使用开关
——它比必要的时间长,并且当您忘记了中断
时,很容易造成问题。如果可以,请改用对象查找:
const stringsToIds = [
['STRING1', 'TOPIC1'],
['STRING2', 'TOPIC2'],
['STRING3', 'TOPIC3'],
];
const { href } = window.location;
const match = stringsToIds.find(([str]) => href.includes(str));
if (match) document.getElementById(match[1]).checked = true;
这样,您的代码非常简洁,易于理解。您可以这样做:
$(document).ready(function () {
var pairs = [
{ match: "STRING1", check: "TOPIC1" },
{ match: "STRING2", check: "TOPIC2" },
{ match: "STRING3", check: "TOPIC3" }
];
var foundPair = pairs.find(function (pair) {
return window.location.href.indexOf(pair.match) > -1;
});
if (foundPair) {
document.getElementById(foundPair.check).checked = true;
}
});
请注意,IE中默认不支持Array#find
,但可以使用添加。您可以执行以下操作:
$(document).ready(function () {
var pairs = [
{ match: "STRING1", check: "TOPIC1" },
{ match: "STRING2", check: "TOPIC2" },
{ match: "STRING3", check: "TOPIC3" }
];
var foundPair = pairs.find(function (pair) {
return window.location.href.indexOf(pair.match) > -1;
});
if (foundPair) {
document.getElementById(foundPair.check).checked = true;
}
});
请注意,Array#find
在IE中默认不受支持,但可以通过使用添加。为什么不使用对象。像这样的,
var strToID = {
"STRING1": () => {
document.getElementById("TOPIC1").checked = true;
},
"STRING2": () => {
document.getElementById("TOPIC2").checked = true;
}
}
if(window.location.href.indexOf("STRING1") > -1 && strToID["STRING1"]) {
strToID["STRING1"]();
}
为什么不使用对象呢。像这样的,
var strToID = {
"STRING1": () => {
document.getElementById("TOPIC1").checked = true;
},
"STRING2": () => {
document.getElementById("TOPIC2").checked = true;
}
}
if(window.location.href.indexOf("STRING1") > -1 && strToID["STRING1"]) {
strToID["STRING1"]();
}
如果它们总是被称为STRINGx
和TOPICx
,其中x
总是匹配的,那么你根本不需要If
条件-你可以解析这个数字x
,然后通过getElementById(“主题”+x)
@YeldarKurmangaliyev获得元素,我认为假设它们没有被调用是安全的“STRINGx”和“TOPICx”“@JLRishe是的,我想。我只是提出了这个想法,无论它们被称为什么,OP仍然可以从中解析x
,如果它总是包含这个x
,而不是编写映射字典\switch\if等。如果它们总是被称为STRINGx
和TOPICx
,其中x
总是匹配,然后你根本不需要,如果条件-你可以解析这个数字x
,然后通过getElementById(“TOPIC”+x)
@YeldarKurmangaliyev来获取元素。我想可以安全地假设它们不是“STRINGx”和“TOPICx”。@JLRishe是的,我猜。我只是提出了这个想法,无论它们被称为什么,OP仍然可以从中解析x
,如果它总是包含这个x
,而不是编写映射字典\switch\if等。这是提供的解决方案中最干净、最精简的代码。它非常适合我的需要。感谢您的解释和建议:切换
干杯!!这是提供的解决方案中最干净、最精简的代码。它非常适合我的需要。感谢您的解释和建议:切换
干杯!!