使用Javascript在forEach中进行切换是不好的做法吗?
book.forEach(function (getBook, i) {
switch (getBook) {
case path:
string = 'some html';
break;
};
});
我的理解是这会为getBook的每个实例创建一个开关。让我们说有100个。然后我有100个单独的开关。那不好吗?
最重要的是,有没有人有更好的方法来做到这一点?似乎只有一个开关而不是整个开关会更好。
答案 0 :(得分:3)
在此示例中,调整当前代码,您可以执行类似 -
之类的操作bookActions = {};
bookActions['path'] = function() { // or the real way you're loading these
// other code to generate that you would have had in
// the switch case
return 'some html';
};
然后,一旦你有100个左右的案件,你可以
book.forEach(function(getBook, i) {
if (bookActions[getBook]) {
string = bookActions[getBook]();
}
});
通过这种方式,我使用文字对象作为字符串(代码中的getBook
)和函数(开关案例的主体)之间的映射。
答案 1 :(得分:3)
除非开关很长,比如超过5-10个情况,否则可以像你的例子那样做。 JavaScript在单个线程中运行这样的例程,因此没有更高级的功能技术的胜利。纯粹是为了代码维护,如果你有十几个案例,那么使用一组函数并将它们映射到一个对象是有意义的。实际上,许多JavaScript模式都是基于这种技术构建的,主要用于各种路由器。例如,请查看Backbone router。请注意,您如何甚至可以将案例鉴别器(路径路径)构思化。
调用这样的路线很容易(近似的想法,因为问题中的代码不完整):
if (routes[book.path]) routes[book.path].apply(self, args)
但是,如果您想使用路由模板,则需要迭代所有映射,如下所示:
for (route in routes) {
if (matches(route,book.path)) routes[route].apply(self, args)
}