Javascript 2-й ассоциативный массив - PullRequest
0 голосов
/ 19 апреля 2011

У меня есть массив 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]. Эти индексы массива являются идентификаторами, введенными пользователем, и я не могу наложить ограничение на формат идентификатора. Я новичок в 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 голосов
/ 19 апреля 2011

Тот факт, что в структуре памяти Javascript достаточно индексов для доступа к 999998, вызывает беспокойство.Вы определенно собираетесь опрокинуть браузер, если большая часть предыдущих записей загружена вместе с ним.

Что-то не так с вызовом индекса 999 вместо 0999?

Похоже, вывы пытаетесь использовать строки для индексации вторичных элементов в массиве, а не индексов - таких как 'address' и 'phone'.

Итак, ваша структура должна быть хеш-таблицами hashmaps:

var providerData = {
    '0999': {
        address: '321 Sesame St',
        zip: '12345'
    },
    '1000': {// more here
    }
};

alert(providerData['0999']['address']); // alerts "321 Sesame St"

Но вы должны учитывать количество загруженных в него данных.

0 голосов
/ 19 апреля 2011

Думаю, ваш ассоциативный массив неверен (или в вашем коде отсутствует информация).

proData[prov_999998] = new Array();

должно быть

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

и так далееВо всяком случае, вы можете использовать объекты JavaScript, чтобы сделать это аккуратно.

0 голосов
/ 19 апреля 2011

Синтаксис, который вы используете, предназначен для пар ключ / значение объекта, а не для массивов.

Скорее всего, вы должны использовать

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

...