Javascript 2-d关联数组

时间:2011-04-19 00:26:24

标签: javascript jsp associative-array

我有一个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() %>";

<%  } 
} %>

3 个答案:

答案 0 :(得分:0)

您使用的语法是对象键/值对,而不是数组。

你最有可能使用

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"]; 
}

<击>

答案 1 :(得分:0)

在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"

但您应该考虑加载到其中的数据量。

答案 2 :(得分:0)

猜猜您的关联数组是错误的(或者您的代码缺少信息)。

proData[prov_999998] = new Array();

应该是

proData['prov_999998'] = new Array();

等等。无论如何,你可以使用javascript对象以一种巧妙的方式做到这一点。