Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何简化多个Javascript IF语句?_Javascript_If Statement_Switch Statement - Fatal编程技术网

如何简化多个Javascript IF语句?

如何简化多个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":

我有以下JS用于运行此语句: “如果当前页面的URL包含
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等。这是提供的解决方案中最干净、最精简的代码。它非常适合我的需要。感谢您的解释和建议:切换
干杯!!这是提供的解决方案中最干净、最精简的代码。它非常适合我的需要。感谢您的解释和建议:切换
干杯!!