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

how to manage 100's of else if statement in javascript? better way?

本文关键字:语句 if 更好 方法 else JavaScript 管理      更新时间:2023-09-26

我正在学习javascript。我正在尝试回答我的测验 - 对网址进行分类。如何改进对 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';

您可以使用 map 对象和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";

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

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

为什么不呢?

    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'

"JavaScript Trie Performance Analysis"讨论了如何在JavaScript中使用Trys进行紧凑,高效的前缀查找。

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

如果if ... else if ... else的主体不是公式化的,则可以存储将这些主体封装为 trie 值的函数。