Javascript 2-d关联数组

| 我有一个Javascript 2-D数组,定义如下:
proData[prov_999998] = new Array();

proData[prov_999998][\"address\"] = \"29 South St. South #202  Uxbridge   ON  L9P 1V9\";

proData[prov_999998][\"phone\"] = \"555-555-5555\";

proData[prov_999998][\"fax\"] = \"444-444-4444\";
我正在尝试通过此函数访问这些数组元素:
function switchPro(value) {
document.getElementById(\"letterheadName\").value = value;
document.getElementById(\"letterheadAddress\").value = providerData[prov_999998][\"address\"];
document.getElementById(\"letterheadAddressSpan\").innerHTML = providerData[prov_999998][\"address\"] ;  
document.getElementById(\"letterheadPhone\").value = providerData[prov_999998][\"phone\"];
document.getElementById(\"letterheadPhoneSpan\").innerHTML = providerData[prov_999998][\"phone\"]; 
document.getElementById(\"letterheadFax\").value = providerData[prov_999998][\"fax\"]; 
document.getElementById(\"letterheadFaxSpan\").innerHTML = providerData[prov_999998][\"fax\"]; 
}
但我收到一条错误消息:\“ prov_999998在\” providerData [prov_999998] [\“ address \”]; \“中未定义。 有人可以帮我吗?我无法将数字用作数组索引,因为javascript不接受以\'0 \'开头的数组索引,例如[0999]。这些数组索引是用户输入的ID,因此我无法限制ID格式。我是javascript的新手,因此希望获得帮助。 实际上,我希望第一个索引为变量。这是我在做什么:
function switchProvider(value) {
    var val =  \"prov_\"+value; 
    document.getElementById(\"letterheadName\").value = value;
    document.getElementById(\"letterheadAddress\").value = providerData[val][\"address\"];
    document.getElementById(\"letterheadAddressSpan\").innerHTML = providerData[val][\"address\"] ; 
    document.getElementById(\"letterheadPhone\").value = providerData[val][\"phone\"];
    document.getElementById(\"letterheadPhoneSpan\").innerHTML = providerData[val][\"phone\"]; 
    document.getElementById(\"letterheadFax\").value = providerData[val][\"fax\"]; 
    document.getElementById(\"letterheadFaxSpan\").innerHTML = providerData[val][\"fax\"]; 

    } 
但这不起作用,网页上的值被呈现为“未定义”。我究竟做错了什么? 这是更多代码,它们是JSP和Javascript一起使用。
var providerData = new Array();
<% 
for (Provider p : prList) {
if (!p.getProviderNo().equalsIgnoreCase(\"-1\")) {
        String prov_no = \"prov_\"+p.getProviderNo();
        %>
    providerData[<%=prov_no%>][\"address\"] = \"<%=(p.getClinicAddress() + \"  \" + p.getClinicCity() + \"   \" + p.getClinicProvince() + \"  \" + p.getClinicPostal()).trim() %>\";
    providerData[<%=prov_no%>][\"phone\"] = \"<%=p.getClinicPhone().trim() %>\";
    providerData[<%=prov_no%>][\"fax\"] = \"<%=p.getClinicFax().trim() %>\";

<%  } 
} %>
已邀请:
您使用的语法适用于对象键/值对,而不适用于数组。 您最有可能使用
var proData = {};

proData[\'prov_999998\'] = {};
proData[\'prov_999998\'][\"address\"] = \"29 South St. South #202  Uxbridge   ON  L9P 1V9\";
proData[\'prov_999998\'][\"phone\"] = \"555-555-5555\";
proData[\'prov_999998\'][\"fax\"] = \"444-444-4444\";
并使用(即)访问
providerData[\'prov_999998\'][\"address\"];
现在,如果prov_999998是变量,那么您确实应该在不添加引号的情况下访问它,但是请确保已为其分配了一个值,并且当您尝试在函数中使用它时,该值仍然存在。 原始答案 您应该将prov_999998括在引号
\'prov_999998\'
中,以使其成为文字,否则将其视为变量。
proData[\'prov_999998\'] = new Array();
proData[\'prov_999998\'][\"address\"] = \"29 South St. South #202  Uxbridge   ON  L9P 1V9\";
proData[\'prov_999998\'][\"phone\"] = \"555-555-5555\";
proData[\'prov_999998\'][\"fax\"] = \"444-444-4444\";
function switchPro(value) {
  document.getElementById(\"letterheadName\").value = value;
  document.getElementById(\"letterheadAddress\").value = providerData[\'prov_999998\'][\"address\"];
  document.getElementById(\"letterheadAddressSpan\").innerHTML = providerData[\'prov_999998\'][\"address\"] ;  
  document.getElementById(\"letterheadPhone\").value = providerData[\'prov_999998\'][\"phone\"];
  document.getElementById(\"letterheadPhoneSpan\").innerHTML = providerData[\'prov_999998\'][\"phone\"]; 
  document.getElementById(\"letterheadFax\").value = providerData[\'prov_999998\'][\"fax\"]; 
  document.getElementById(\"letterheadFaxSpan\").innerHTML = providerData[\'prov_999998\'][\"fax\"]; 
}
在Javascript内存结构中有足够多的索引可以达到999998的事实令人担忧。如果前面的很多条目都与浏览器一起加载,那么您肯定会让浏览器崩溃。 调用索引999而不是0999有什么问题吗? 看来您正在尝试使用字符串来索引数组中的次要项目,而不是使用索引,例如\'address \'和\'phone \'。 因此,您的结构应该是哈希图的哈希图:
var providerData = {
    \'0999\': {
        address: \'321 Sesame St\',
        zip: \'12345\'
    },
    \'1000\': {// more here
    }
};

alert(providerData[\'0999\'][\'address\']); // alerts \"321 Sesame St\"
但是您应该考虑加载到其中的数据量。
猜测您的关联数组是错误的(或您的代码缺少信息)。
proData[prov_999998] = new Array();
应该
proData[\'prov_999998\'] = new Array();
等等。无论如何,您可以使用javascript对象以一种简洁的方式来做到这一点。

要回复问题请先登录注册