-1

我需要修改一些在我使用的程序中运行的脚本。

该脚本仅在具有 X 和 Y 轴的图表上以特定价格绘制水平线。每当我切换到新图表时,脚本将运行所有语句,直到找到与图表匹配的符号/名称,然后它将加载行。

我正在使用永无止境的“if else 语句”来使事情对我来说尽可能简单。我有 650 条 if else 语句,每条都包含数百个“附加线”。

符号名称之间没有关系,除了字母表中的字母。符号包含的所有价格/数字都是随机的。

但我正在寻找一种更好的解决方案,让它运行得更快、更高效,而不是使用 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;

}
4

3 回答 3

5

您可以使用地图:

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);
});
于 2015-05-22T02:15:27.540 回答
1

您可以像这样更改它,这可能会表现得更好并且更容易管理。

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]);
}
于 2015-05-22T02:10:14.017 回答
1

无论您是否有意这样做,使用Java标签都是一个好主意,因为我认为对您来说最好的选择是创建一个 REST 服务,它接受符号名称并返回值的 JSON 结构,您的 JS 代码可以使用该结构调用addline().

因此,您可能会拨打电话\YourWebApp\GetLines?Symbol=AAB,JSON 响应可能如下所示:

{
    "lines": ["37.5", "40.9", "15.5", "100.5", ...]
}

然后,您可以遍历lines数组并对addline().

在 JS 代码中存储数百条语句的状态可能不是一个好习惯。if-else而且我认为如果可能的话,最好将此业务逻辑保留在服务器端。

于 2015-05-22T02:14:30.477 回答