使用 Javascript 在 forEach 中进行切换是不好的做法吗?
Is it bad practice to have a switch within forEach with Javascript?
使用 Javascript 在 forEach 中进行切换是不好的做法吗?
book.forEach(function (getBook, i) {
switch (getBook) {
case path:
string = 'some html';
break;
};
});
我的理解是,这将为每个 getBook 实例创建一个开关。假设有 100 个。然后我有 100 个独立的开关。不好吗?
最重要的是,有没有人有更好的方法来做到这一点?似乎只有一个开关比一大堆开关更好。
在此示例中,调整您当前的代码,您可以执行类似 -
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
)和函数(切换案例的主体)之间的映射。
除非开关很长,比方说,超过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)
}
使用 Javascript 在 forEach 中进行切换是不好的做法吗?
book.forEach(function (getBook, i) {
switch (getBook) {
case path:
string = 'some html';
break;
};
});
我的理解是,这将为每个 getBook 实例创建一个开关。假设有 100 个。然后我有 100 个独立的开关。不好吗?
最重要的是,有没有人有更好的方法来做到这一点?似乎只有一个开关比一大堆开关更好。
在此示例中,调整您当前的代码,您可以执行类似 -
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
)和函数(切换案例的主体)之间的映射。
除非开关很长,比方说,超过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)
}