如何在javascript中管理100的else if语句?更好的方法?

时间:2014-12-24 15:14:26

标签: javascript

我正在学习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';

4 个答案:

答案 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的实体不是公式化的,您可以将封装这些实体的函数存储为特里结构的值。