共享数组值的Javascript开关语句

共享数组值的Javascript开关语句,javascript,arrays,switch-statement,Javascript,Arrays,Switch Statement,我正在从事一个计算机科学项目,我想创建一些Javascript,允许用户从一个下拉菜单中选择三件事中的一件,从另一个下拉菜单中选择三件事中的一件。选择是无家可归者收容所、食物银行和救世军。接下来是邓肯、纳奈莫和维多利亚。如果用户选择无家可归者收容所和邓肯,它将显示该镇无家可归者的姓名和位置 我的部分工作正常,但我的一些案例似乎共享了我数组中的值。例如,每次我在代表维多利亚无家可归者收容所的情况下更改数组值(例如,Relief[6]),它也会更改纳奈莫的食物库。他们在分享案例。我猜这与它们的下拉值

我正在从事一个计算机科学项目,我想创建一些Javascript,允许用户从一个下拉菜单中选择三件事中的一件,从另一个下拉菜单中选择三件事中的一件。选择是无家可归者收容所、食物银行和救世军。接下来是邓肯、纳奈莫和维多利亚。如果用户选择无家可归者收容所和邓肯,它将显示该镇无家可归者的姓名和位置

我的部分工作正常,但我的一些案例似乎共享了我数组中的值。例如,每次我在代表维多利亚无家可归者收容所的情况下更改数组值(例如,Relief[6]),它也会更改纳奈莫的食物库。他们在分享案例。我猜这与它们的下拉值有关。无家可归者收容所是第三个选择,维多利亚是第一个(3+1=4),纳奈莫和粮食银行都是第二个选择(2+2=4)

以下是整个文档:

     <!DOCTYPE html>

<HTML>

<HEAD>
<title> Homeless Relief </title>
<script language="Javascript">

"use strict";
var relief = new Array();

    relief[0]= "<H3> Homeless Shelter in Duncan </h3><H3> Warmland House </H3>  <H3> 371 Festubert St  250-746-5521 </h3>";
    relief[1]= "<H3> Food Bank in Duncan </h3><H3> Cowichan Valley Baskey Society </H3>  <H3> 5810 Garden St 250-746-1566 </h3>";
    relief[2]= "<H3> Salvation Army in Duncan </h3><H3> Community & Family Services - Cowichan Valley Ministries </H3>  <H3> 280 Trans Canada Hwy 250-746-8669 </h3>";
    relief[3]= "<H3> Homeless Shelter in Nanaimo </h3><H3> Samaritan House  </H2>  <H3> 355 Nicol St 250-753-1474 </H3>";
    relief[4]= "<H3> Food Bank in Nanaimo </h3><H3> Loaves & Fishes Food Bank   </H3>  <H3> 1009 Farquhar St 250-754-8347 </H3>";
    relief[5]= "<H3> Salvation Army in Nanaimo </h3><H3> Nanaimo Community Church  </H2>  <H3> 505 Eighth St 250-753-8834 </H3>";
    relief[6]= "<H3> Homeless Shelter in Victoria </h3><H3> Rock Bay Landing </H3>  <H3> 525 Ellice St 250-383-1951 </h3>" ;
    relief[7]= "<H3> Food Bank in Victoria </h3><H3> The Mustard Seed </H3>  <H3> 625 Queens Ave 250-953-1575  </H3>";
    relief[8]= "<H3> Salvation Army in Victoria </h3><H3> The Salvation Army Stan Hagen Centre for Families </H3>  <H3> 2695 Quadra St 250-386-8521  </H3>";

function getRelief( )
{
var location = parseFloat(document.reliefform.shelter.value);
var place = parseFloat(document.reliefform.area.value);
var together = location + place;

    switch(together)

  {
case 0:
    document.getElementById("info").innerHTML = relief[0];

    break;
case 1:
    document.getElementById("info").innerHTML = relief[0];

    break;
case 2:
    document.getElementById("info").innerHTML = relief[0];

    break;
case 3:
    document.getElementById("info").innerHTML = relief[0];

    break;
case 4:
    document.getElementById("info").innerHTML = relief[0];

    break;
case 5:
    document.getElementById("info").innerHTML = relief[0];

    break;
case 6:
    document.getElementById("info").innerHTML = relief[0];

    break;
case 7:
    document.getElementById("info").innerHTML = relief[0];

    break;
case 8:
    document.getElementById("info").innerHTML = relief[0];

    break;
}
}
</script>
</head>
<body>

<H1> Where can I find places of homeless relief in Duncan, Nanaimo, and Victoria? </H1>

<FORM NAME="reliefform">
<select name="shelter">
<option value="1" selected>Homeless Shelter</option>
<option value="2">Food Bank</option>
<option value="3">Salvation Army</option>
</select>

<select name="area">
<option value="1" selected>Duncan</option>
<option value="2">Nanaimo</option>
<option value="3">Victoria</option>
</select>

<input type="button" value="Location" name="selector" onclick="getRelief()">

</form>

<p id="info"> &nbsp; </p>

</body>
</html>

无家可归者救济
“严格使用”;
var relief=新数组();
救济[0]=“Duncan Warmland House 371 Festubert街无家可归者收容所250-746-5521”;
救济[1]=“Duncan Cowichan Valley巴斯基协会食品银行5810花园街250-746-1566”;
救济[2]=“Duncan社区和家庭服务中的救世军-Cowichan山谷部280横贯加拿大公路250-746-8669”;
救济[3]=“纳奈莫撒玛利亚人之家无家可归者收容所355 Nicol St 250-753-1474”;
救济[4]=“纳奈莫面包和鱼类食品银行1009 Farquhar街250-754-8347”;
救济[5]=“纳奈莫社区教堂救世军505第八街250-753-8834”;
救济[6]=“维多利亚岩湾无家可归者收容所着陆525 Ellice St 250-383-1951”;
救济[7]=“维多利亚州芥末籽食品银行625皇后大道250-953-1575”;
救济[8]=“维多利亚救世军斯坦·哈根救世军家庭中心2695 Quadra街250-386-8521”;
函数getRelief()
{
var location=parseFloat(document.reliefform.shedder.value);
var place=parseFloat(document.relieform.area.value);
var=位置+地点;
开关(一起)
{
案例0:
document.getElementById(“info”).innerHTML=relief[0];
打破
案例1:
document.getElementById(“info”).innerHTML=relief[0];
打破
案例2:
document.getElementById(“info”).innerHTML=relief[0];
打破
案例3:
document.getElementById(“info”).innerHTML=relief[0];
打破
案例4:
document.getElementById(“info”).innerHTML=relief[0];
打破
案例5:
document.getElementById(“info”).innerHTML=relief[0];
打破
案例6:
document.getElementById(“info”).innerHTML=relief[0];
打破
案例7:
document.getElementById(“info”).innerHTML=relief[0];
打破
案例8:
document.getElementById(“info”).innerHTML=relief[0];
打破
}
}
我在哪里可以找到邓肯、纳奈莫和维多利亚的无家可归者救济场所?
无家可归者收容所
食物赈济处
救世军
邓肯
纳奈莫
维多利亚


有人能解释并告诉我如何解决这个问题吗?

您最好不要将所选的值/id添加在一起,并在IF语句中单独使用它们。例如

if (location == 1) {
    if (place == 1) {
          document.getElementById("info").innerHTML = relief[0];
    }
    else if (place == 2) {
          document.getElementById("info").innerHTML = relief[1];
    }
    else if (place == 3) {
          document.getElementById("info").innerHTML = relief[2];
    }
} else if (location == 2) {
    ...
} else if (location == 3) { etc...
希望这有帮助

编辑-可能会稍微好一点,更像这样压缩,可以根据偏好交换开关和ifs:

switch (location) {
  case 1:
    switch (place) {
        case 1:
          document.getElementById("info").innerHTML = relief[0];
          break;
        case 2:
          document.getElementById("info").innerHTML = relief[1];
          break;
        case 3:
          document.getElementById("info").innerHTML = relief[2];
          break;
    }
    break;
  case 2:
    switch (place) {
        ...
    }
    break;
  case 3:
    switch (place) {
        ...
    }
    break;
}

我发现这里面有三个问题。我猜你忽略了这些

问题1:

将下拉列表中的值从{1,2,3}更改为{0,1,2}

问题2:

替换

var together = location + place;

问题3:

更换每个

relief[0];


您可以尝试将数据格式化为多维数组。这将允许您在数组中循环并选择与用户输入的参数匹配的条目。通过不将HTML格式构建到数组中,您可以将该数组用于其他目的。将数据与格式分离也是一种很好的做法

这种方法还有一个额外的优点,即允许您显示同一城市中相同类型的多个企业。例如,在邓肯可能有两支救世军

var relief = Array();

relief[0] = Array();
relief[0]["type"] = "Salvation Army";
relief[0]["city"] = "Duncan";
relief[0]["name"] = "Duncan Salvation Army Drop-off Location";
relief[0]["address"] = "789 Broad Street";

relief[1] = Array();
relief[1]["type"] = "Salvation Army";
relief[1]["city"] = "Duncan";
relief[1]["name"] = "Duncan Salvation Army Store";
relief[1]["address"] = "123 Main Street";

relief[2] = Array();
relief[2]["type"] = "Food Bank";
relief[2]["city"] = "Nanaimo";
relief[2]["name"] = "Nanaimo Food Bank";
relief[2]["address"] = "456 1st Street";

// var names correspond to array keys
// values of form inputs need not be abstracted to numbers. The value of <option> two for city would just be Nanaimo, not 2. This value is more meaningful to someone else viewing your code.

var city = document.reliefform.shelter.value;
var type = document.reliefform.area.value;

for(i = 0; i < relief.length; i++) {
    if(relief[i]["type"] === type && relief[i]["city"] === city) {
        document.getElementById("info").innerHTML += "<h1>" + relief[i]["name"] + "</h1><br /><h3>" + relief[i]["address"] + "</h3><br /><br />";
    }
}
var relief=Array();
relief[0]=数组();
救济[0][“类型”]=“救世军”;
浮雕[0][“城市”]=“邓肯”;
救济[0][“名称”]=“邓肯救世军下车地点”;
浮雕[0][“地址”]=“博德街789号”;
relief[1]=数组();
救济[1][“类型”]=“救世军”;
浮雕[1][“城市”]=“邓肯”;
救济[1][“名称”]=“邓肯救世军商店”;
浮雕[1][“地址”]=“大街123号”;
relief[2]=数组();
救济[2][“类型”]=“粮食银行”;
浮雕[2][“城市”]=“纳奈莫”;
救济[2][“名称”]=“纳奈莫食品银行”;
救济[2][“地址”]=“456第一街”;
//变量名对应于数组键
//表单输入的值不需要抽象为数字。城市2的值应该是Nanaimo,而不是2。此值对查看您的代码的其他人更有意义。
var city=document.reliefform.horder.value;
变量类型=document.reliefform.area.value;
对于(i=0;i“+relief[i][“address”]+”
; } }
e array
relief
存储什么?用户选择了什么,然后是位置名称,然后是地址和电话号码。例如:救济[0]=“Duncan Warmland House 371 Festubert街250-746-5521号无家可归者收容所”;我不得不编辑3到4次,以修复我复制和粘贴时犯的大量愚蠢错误,确保您查看最新的更改。我想该睡觉了!!:)它似乎不起作用。还有什么我需要添加或更改的吗?我编辑了我的评论以添加整个文件的布局。否,哪个版本是d
relief[together]
var relief = Array();

relief[0] = Array();
relief[0]["type"] = "Salvation Army";
relief[0]["city"] = "Duncan";
relief[0]["name"] = "Duncan Salvation Army Drop-off Location";
relief[0]["address"] = "789 Broad Street";

relief[1] = Array();
relief[1]["type"] = "Salvation Army";
relief[1]["city"] = "Duncan";
relief[1]["name"] = "Duncan Salvation Army Store";
relief[1]["address"] = "123 Main Street";

relief[2] = Array();
relief[2]["type"] = "Food Bank";
relief[2]["city"] = "Nanaimo";
relief[2]["name"] = "Nanaimo Food Bank";
relief[2]["address"] = "456 1st Street";

// var names correspond to array keys
// values of form inputs need not be abstracted to numbers. The value of <option> two for city would just be Nanaimo, not 2. This value is more meaningful to someone else viewing your code.

var city = document.reliefform.shelter.value;
var type = document.reliefform.area.value;

for(i = 0; i < relief.length; i++) {
    if(relief[i]["type"] === type && relief[i]["city"] === city) {
        document.getElementById("info").innerHTML += "<h1>" + relief[i]["name"] + "</h1><br /><h3>" + relief[i]["address"] + "</h3><br /><br />";
    }
}