Динамический вызов массива в функции - PullRequest
3 голосов
/ 23 июня 2011

У меня есть карта США со всеми 50 штатами в виде нажимаемых кнопок, когда пользователь щелкает по состоянию, которое я хочу отобразить информацию об этом состоянии, динамически вызывая массив этого состояния. Ниже моя собственная слабая попытка, которая явно не работает.

var stateList = new Array("AK","AL","AR","AZ","CA","CO","CT","DC","DC2","DE","FL","GA","GU","HI","IA","ID",
        "IL","IN","KS","KY","LA","MA","MD","ME","MH","MI","MN","MO","MS","MT","NC","ND","NE","NH","NJ","NM","NV","NY",
        "OH","OK","OR","PA","PR","RI","SC","SD","TN","TX","UT","VA","VT","WA","WI","WV","WY");

function listenerForI( i ) {
    document.getElementById(stateList[i])
    .addEventListener('mousedown', function() {
        stateSelect(stateList[i]);
    }, false);
}

for (var i = 0; i < stateList.length; i++) {
   listenerForI( i );
}

var HIdat = new Array(20,28,50,2) //one array for all 50 states COdat, AKdat, etc.

function stateSelect(state){
    var display_data1 = state + "dat[0]";
    alert(display_data1);
}

Должен ли я использовать eval ()? Я слышал о том, что вы можете сделать с глобальным «окном []», но я не понимаю, как это будет работать.

Ответы [ 3 ]

6 голосов
/ 23 июня 2011

Вы должны хранить массивы состояний в своем собственном объекте:

var stateData = {
    HI: [1, 2, 3],
    IL: [4, 5, 6],
    ...
};

var myData = stateData[state];
0 голосов
/ 23 июня 2011

В JavaScript глобальные переменные являются членами объекта окна, поэтому вы можете использовать синтаксис индексации массива, чтобы использовать их без использования eval, чего обычно следует избегать, например:

function stateSelect(state) {
    var display_data1 = window[state + "dat"];
    alert(display_data1);
}
0 голосов
/ 23 июня 2011

Использование window - это опция, подобная этой:

window[state + "dat"] даст вам массив.

Но я бы предложил ... именно то, что SLaks только что опубликовал, так что сделайте это вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...