我正在学习javascript。我想回答我的测验 - 分类网址。如何改进我对100个网址进行分类的答案..我的答案不是那么有效......任何帮助?感谢。
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';
答案 0 :(得分:6)
您可以使用地图对象和for
循环来检查哪个网址与当前网页匹配:
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";
答案 1 :(得分:2)
您可以像这样将它们映射到一起,但我不确定它是否值得:
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';
请参阅此实例:
function test(pageURL) {
var match = pageURL.match(/http:\/\/www.domain.com\/(.+)\//);
return (match && match[1]) || 'other';
}
alert(test('http://www.domain.com/health/')); // health
alert(test('http://www.domain.com/whatever/')); // whatever
alert(test('http://www.domain.com/')); // other

答案 2 :(得分:1)
为什么不呢?
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'
答案 3 :(得分:0)
"JavaScript Trie Performance Analysis"讨论了如何在JavaScript中使用Tries来进行紧凑,高效的前缀查找。
看起来大多数支票都可以归结为“字符串s是否以URL前缀开头”。这种最长的前缀检查正是特里斯设计的目的。
如果if ... else if ... else
的实体不是公式化的,您可以将封装这些实体的函数存储为特里结构的值。