Endless JavaScript ELSE IF 语句 650 需要缩短
Endless JavaScript ELSE IF statement 650 Need shortening
我需要修改我使用的程序中 运行 的一些脚本。
该脚本仅在具有 X 和 Y 轴的图表上以特定价格绘制水平线。每当我切换到新图表时,脚本都会 运行 遍历所有语句,直到到达与图表匹配的 Symbol/name,然后它会加载行。
我正在使用永无止境的 "if else statement" 让事情对我来说尽可能简单。我有 650 个 if else 语句,每个语句包含数百个 "addlines".
除字母表中的字母外,符号名称之间没有任何关系。符号包含的所有 prices/numbers 都是随机的。
但我正在寻找更好的解决方案,以使其 运行 更快、更高效,而不是使用 650 个 else if 语句。我知道我使用的命令与我只是概括的不一样。希望有人能帮忙。
将 Else if 语句乘以 650,这就是总数。
var Symbol
if (Symbol == "AAB") {
addline(37.5);
addline(40.9);
addline(15.5);
addline(100.5);
etc....
} else if (Symbol == "ZOB") {
addline(15.8);
addline(20.9);
addline(100.5);
addline(200.5);
etc....
} else if (Symbol == "STX") {
addline(10.9);
addline(19.8);
addline(5.5);
addline(20.2);
etc....
} else if (Symbol == "AXI") {
addline(200);
addline(20);
addline(5.9);
addline(9.9);
etc....
} else if (Symbol == "AXI") {
ETC.....
}
return;
}
您可以像这样更改它,这可能会表现得更好并且更容易管理。
var Symbol = 'AAB';
var Symbols = {};
Symbols.AAB = [37.5, 40.9, 15.5, 100.5];
Symbols.ZOB = [15.8, 20.9, 100.5, 200.5];
Symbols.STX = [10.9, 19.8, 5.5, 20.2];
Symbols.AXI = [200, 20, 5.9, 9.9];
for(var x = 0; x < Symbols[Symbol].length; x++) {
addline(Symbols[Symbol][x]);
}
无论您是否有意为之,使用 Java
标签都是一个好主意,因为我认为对您来说最好的选择是创建一个接受符号名称和 returns 一个 JSON 值结构,你的 JS 代码可以用它调用 addline()
.
因此您可能会调用 \YourWebApp\GetLines?Symbol=AAB
,JSON 响应可能如下所示:
{
"lines": ["37.5", "40.9", "15.5", "100.5", ...]
}
然后您可以遍历 lines
数组并适当调用 addline()
。
在 JS 代码中存储数百个 if-else
语句的状态可能 不是 好的做法。而且我认为如果可能的话,将此业务逻辑保留在服务器端会更好。
您可以使用地图:
var SymbolMap = {
AAB: [37.5, 40.9, 15.5, 100.5],
ZOB: [15.8, 20.9, 100.5, 200.5],
STX: [10.9, 19.8, 5.5, 20.2],
AXI: [200, 20, 5.9, 9.9],
// ...
};
var symbol = 'AAB';
SymbolMap[symbol].forEach(function(x) {
addline(x);
});
我需要修改我使用的程序中 运行 的一些脚本。
该脚本仅在具有 X 和 Y 轴的图表上以特定价格绘制水平线。每当我切换到新图表时,脚本都会 运行 遍历所有语句,直到到达与图表匹配的 Symbol/name,然后它会加载行。
我正在使用永无止境的 "if else statement" 让事情对我来说尽可能简单。我有 650 个 if else 语句,每个语句包含数百个 "addlines".
除字母表中的字母外,符号名称之间没有任何关系。符号包含的所有 prices/numbers 都是随机的。
但我正在寻找更好的解决方案,以使其 运行 更快、更高效,而不是使用 650 个 else if 语句。我知道我使用的命令与我只是概括的不一样。希望有人能帮忙。
将 Else if 语句乘以 650,这就是总数。
var Symbol
if (Symbol == "AAB") {
addline(37.5);
addline(40.9);
addline(15.5);
addline(100.5);
etc....
} else if (Symbol == "ZOB") {
addline(15.8);
addline(20.9);
addline(100.5);
addline(200.5);
etc....
} else if (Symbol == "STX") {
addline(10.9);
addline(19.8);
addline(5.5);
addline(20.2);
etc....
} else if (Symbol == "AXI") {
addline(200);
addline(20);
addline(5.9);
addline(9.9);
etc....
} else if (Symbol == "AXI") {
ETC.....
}
return;
}
您可以像这样更改它,这可能会表现得更好并且更容易管理。
var Symbol = 'AAB';
var Symbols = {};
Symbols.AAB = [37.5, 40.9, 15.5, 100.5];
Symbols.ZOB = [15.8, 20.9, 100.5, 200.5];
Symbols.STX = [10.9, 19.8, 5.5, 20.2];
Symbols.AXI = [200, 20, 5.9, 9.9];
for(var x = 0; x < Symbols[Symbol].length; x++) {
addline(Symbols[Symbol][x]);
}
无论您是否有意为之,使用 Java
标签都是一个好主意,因为我认为对您来说最好的选择是创建一个接受符号名称和 returns 一个 JSON 值结构,你的 JS 代码可以用它调用 addline()
.
因此您可能会调用 \YourWebApp\GetLines?Symbol=AAB
,JSON 响应可能如下所示:
{
"lines": ["37.5", "40.9", "15.5", "100.5", ...]
}
然后您可以遍历 lines
数组并适当调用 addline()
。
在 JS 代码中存储数百个 if-else
语句的状态可能 不是 好的做法。而且我认为如果可能的话,将此业务逻辑保留在服务器端会更好。
您可以使用地图:
var SymbolMap = {
AAB: [37.5, 40.9, 15.5, 100.5],
ZOB: [15.8, 20.9, 100.5, 200.5],
STX: [10.9, 19.8, 5.5, 20.2],
AXI: [200, 20, 5.9, 9.9],
// ...
};
var symbol = 'AAB';
SymbolMap[symbol].forEach(function(x) {
addline(x);
});