Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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
如何管理100';javascript中else if语句的类型?更好的方法?_Javascript - Fatal编程技术网

如何管理100';javascript中else if语句的类型?更好的方法?

如何管理100';javascript中else if语句的类型?更好的方法?,javascript,Javascript,我正在学习javascript。我正在尝试回答我的测验-分类URL。如何改进对100个URL进行分类的答案。。我的回答不是很有效率。。有什么帮助吗?谢谢 var pageURL = document.location.href; var isHealth = pageURL.indexOf("http://www.domain.com/health/"); var isCar = pageURL.indexOf("http://www.domain.com/car/"); var isFuel

我正在学习javascript。我正在尝试回答我的测验-分类URL。如何改进对100个URL进行分类的答案。。我的回答不是很有效率。。有什么帮助吗?谢谢

var pageURL = document.location.href;
var isHealth = pageURL.indexOf("http://www.domain.com/health/");
var isCar = pageURL.indexOf("http://www.domain.com/car/");
var isFuel = pageURL.indexOf("http://www.domain.com/fuel/");
var isRoadside = pageURL.indexOf("http://www.domain.com/roadside/");

if (isHealth > -1) {
return 'health';
} else if (isCar > -1) {
return 'car';
} else if (isRoadside > -1) {
return 'roadside';
} else if (isFuel > -1) {
return 'fuel';
} else return 'other';

你可以这样把它们映射在一起,但我不确定这是否值得:

var map = {
    'health': isHealth,
    'car': isCar,
    'roadside': isRoadside,
    'fuel': isFuel
}

for (var i in map) {
    if (map[i] > -1) {
        return i;
    }
}
return 'other';
这是一般的方法


好主意 但是,使用正则表达式可以轻松解决您的特定问题:

var match = pageURL.match(/http:\/\/www.domain.com\/(.+)\//);
return (match && match[1]) || 'other';

请参见此实时示例:

功能测试(pageURL){
var match=pageURL.match(/http:\/\/www.domain.com\/(.+)\/);
返回(匹配和匹配[1])| |“其他”;
}
警报(测试)http://www.domain.com/health/'));   // 健康
警报(测试)http://www.domain.com/whatever/')); // 无论什么
警报(测试)http://www.domain.com/'));          // 其他
为什么不

    var pages = ['health', 'car', 'fuel'] 
    var page = pageURL.split('//')[1].split('/')[1] || -1;
    var index = pages.indexOf(page)

if (index !=-1) 
    return pages[index]
else
  return 'other'

您可以使用map object和
for
循环检查与当前页面匹配的url:

var urls = {
    health: "http://www.domain.com/health/",
    car: "http://www.domain.com/car/",
    roadside: "http://www.domain.com/fuel/",
    fuel: "http://www.domain.com/roadside/"
};

var pageURL = document.location.href;

for (var key in urls) {
    if (pageUrl.indexOf(urls[key]) > -1) {
        return key;
    }
}
return "other";
讨论如何在JavaScript中使用trytes进行紧凑、高效的前缀查找

看起来您的大多数检查都可以归结为“字符串s是否以URL前缀开头”。这种最长前缀检查正是我们设计的


如果你的
的主体。。。否则如果。。。否则
不是公式化的,您可以将封装这些实体的函数存储为trie的值。

通常,switch语句是一组elseifs的替代方法。只需创建一个包含可能匹配项的数组并循环它们。只需返回url的最后一部分:
return pageURL.replace(“http://www.domain.com/","");我认为这可能是一个问题。@Pointy我知道这是一种任务,但我认为OP正在挖掘的漏洞是在想“这是我认为应该做的,但我想让它不那么糟糕”而不是“这是我解决这个问题的方法,有什么更好的方法来解决这个问题?”因为在根url的情况下,该代码将在第一行中断。不应该
返回页面[索引]
返回页面[索引]?或者更好的是,
返回页面一旦你发现它在数组中被列入白名单,你就已经有了要返回的值。太好了,投下一票!!我只给出了一个更好的解决方案,以及在另一个答案中选择的解决方案(但我的解决方案没有被破坏)。。。迫不及待地想知道这件事…@newbiedoodle我不是粗鲁,只是对那些使用鼠标比使用大脑快的人有点恼火。但99%的时间我都喜欢呆在这里我也在考虑这个问题,就在那时,我想可能不是所有的URL都对应于他们URL中的键。但是,如果是这种情况,这个解决方案很酷。@dfsq是的,几乎每个问题都有猜测部分。我也考虑过,但因为4个例子中有4个是匹配的,所以我继续做下去。仍然是两行对数百行。:)