我是HTML和Javascript的新手.我很感激我正在撰写的代码的任何帮助.
我正在研究一个计算器来显示机场之间的距离.用户将有五个"文本"输入,因此他们将编写机场代码,比如MAD,JFK.结果将是马德里和肯尼迪国际机场之间的距离.用户可以添加几个机场,例如BCN MAD JFK ORD,结果应该是所有支路的总添加量(结果= BCN-MAD + MAD-JFK + JFK-ORD).
为了我的目的,距离由我指定也很重要(所以我不需要"计算"坐标之间的距离).
我所做的是我创建了称为"leg1,2,3,4"的变量,它们将每个机场配对,因此leg1可以是例如"BCNMAD",然后使用if
语句我可以获得该段的距离.最后有一个totalDistance变量来添加所有的腿距.
因为每条腿需要单独计算并添加到其他腿,我已经复制了if
每条腿的声明.
这似乎工作得很好,问题是到目前为止我只增加了8个机场.实际需求约为200个机场.而且由于每条腿都有自己的一套if
,我最终可能会有大约800个IF.
我想知道是否有更好的方法来做到这一点?另外,我不知道有多少if
可以处理?
就像我之前说的那样,我对HTML和Javascript非常陌生,所以我确信有更好的选择可以做到这一点,但我已经坚持这个问题好几天了,这是我能想到的最好的解决方案.
所以任何建议或帮助将非常感激.我已经包含了下面的代码.
问候,迈克
function displayDistance()
{
var leg1 = {route:document.getElementById("air1").value + document.getElementById("air2").value , distance:""};
var leg2 = {route:document.getElementById("air2").value + document.getElementById("air3").value , distance:""};
var leg3 = {route:document.getElementById("air3").value + document.getElementById("air4").value , distance:""};
var leg4 = {route:document.getElementById("air4").value + document.getElementById("air5").value , distance:""};
if (leg1.route == "AGPMAD" || leg1.route == "MADAGP") {leg1.distance = 430;}
if (leg1.route == "BCNMAD" || leg1.route == "MADBCN") {leg1.distance = 483;}
if (leg1.route == "LHRMAD" || leg1.route == "MADLHR") {leg1.distance = 1246;}
if (leg1.route == "CDGMAD" || leg1.route == "MADCDG") {leg1.distance = 1065;}
if (leg1.route == "JFKMAD" || leg1.route == "MADJFK") {leg1.distance = 5777;}
if (leg1.route == "ORDJFK" || leg1.route == "JFKORD") {leg1.distance = 1191;}
if (leg1.route == "JFKMCO" || leg1.route == "MCOJFK") {leg1.distance = 1520;}
if (leg1.route == "JFKIAD" || leg1.route == "IADJFK") {leg1.distance = 367;}
if (leg2.route == "AGPMAD" || leg2.route == "MADAGP") {leg2.distance = 430;}
if (leg2.route == "BCNMAD" || leg2.route == "MADBCN") {leg2.distance = 483;}
if (leg2.route == "LHRMAD" || leg2.route == "MADLHR") {leg2.distance = 1246;}
if (leg2.route == "CDGMAD" || leg2.route == "MADCDG") {leg2.distance = 1065;}
if (leg2.route == "JFKMAD" || leg2.route == "MADJFK") {leg2.distance = 5777;}
if (leg2.route == "ORDJFK" || leg2.route == "JFKORD") {leg2.distance = 1191;}
if (leg2.route == "JFKMCO" || leg2.route == "MCOJFK") {leg2.distance = 1520;}
if (leg2.route == "JFKIAD" || leg2.route == "IADJFK") {leg2.distance = 367;}
if (leg2.route == "AGPMAD" || leg2.route == "MADAGP") {leg2.distance = 430;}
if (leg3.route == "BCNMAD" || leg3.route == "MADBCN") {leg3.distance = 483;}
if (leg3.route == "LHRMAD" || leg3.route == "MADLHR") {leg3.distance = 1246;}
if (leg3.route == "CDGMAD" || leg3.route == "MADCDG") {leg3.distance = 1065;}
if (leg3.route == "JFKMAD" || leg3.route == "MADJFK") {leg3.distance = 5777;}
if (leg3.route == "ORDJFK" || leg3.route == "JFKORD") {leg3.distance = 1191;}
if (leg3.route == "JFKMCO" || leg3.route == "MCOJFK") {leg3.distance = 1520;}
if (leg3.route == "JFKIAD" || leg3.route == "IADJFK") {leg3.distance = 367;}
if (leg4.route == "AGPMAD" || leg4.route == "MADAGP") {leg4.distance = 430;}
if (leg4.route == "BCNMAD" || leg4.route == "MADBCN") {leg4.distance = 483;}
if (leg4.route == "LHRMAD" || leg4.route == "MADLHR") {leg4.distance = 1246;}
if (leg4.route == "CDGMAD" || leg4.route == "MADCDG") {leg4.distance = 1065;}
if (leg4.route == "JFKMAD" || leg4.route == "MADJFK") {leg4.distance = 5777;}
if (leg4.route == "ORDJFK" || leg4.route == "JFKORD") {leg4.distance = 1191;}
if (leg4.route == "JFKMCO" || leg4.route == "MCOJFK") {leg4.distance = 1520;}
if (leg4.route == "JFKIAD" || leg4.route == "IADJFK") {leg4.distance = 367;}
var totalDistance = leg1.distance + leg2.distance + leg3.distance + leg4.distance;
document.getElementById("distanceresult").innerHTML = totalDistance;
}
Route:
The total distance is:
没有必要复制每个if
语句块,你应该把它们变成一个函数然后做这样的事情:
function getLegDistance(route) { if (route == "AGPMAD" || route == "MADAGP") return 430; if (route == "BCNMAD" || route == "MADBCN") return 483; if (route == "LHRMAD" || route == "MADLHR") return 1246; if (route == "CDGMAD" || route == "MADCDG") return 1065; if (route == "JFKMAD" || route == "MADJFK") return 5777; if (route == "ORDJFK" || route == "JFKORD") return 1191; if (route == "JFKMCO" || route == "MCOJFK") return 1520; if (route == "JFKIAD" || route == "IADJFK") return 367; } var totalDistance = getLegDistance(leg1.route) + getLegDistance(leg2.route) + getLegDistance(leg3.route) + getLegDistance(leg4.route)
这样你只有一个if
语句块,你可以为你拥有的每个路径调用它.您也可以使用switch
语句而不是所有if
语句,但它不会减少您的行数(虽然它会提高您的性能),因此对象/地图可能会更好.
您可以更好地使用对象,而不是将数据硬编码到一组长条件中.这样可以更好地过渡到数据库解决方案,这将是通常处理的方式.
var distances_ = { "AGPMAD": 430, "MADAGP": 430, "BCNMAD": 483, "LHRMAD": 1246, }; leg1.distance = distances_[ leg1.route ] );
如果您完全使用Javascript操作,则可以使用JSON文本文件和AJAX调用代替数据库,以完全从代码中删除距离数据.