如何管理100';javascript中else if语句的类型?更好的方法?
我正在学习javascript。我正在尝试回答我的测验-分类URL。如何改进对100个URL进行分类的答案。。我的回答不是很有效率。。有什么帮助吗?谢谢如何管理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
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个是匹配的,所以我继续做下去。仍然是两行对数百行。:)