Javascript вычисляемые значения с массивами

JQuery Каждый вопрос о значениях JSON

Этот вопрос похож на приведенный выше, но не тот же самый, прежде чем он будет помечен как дублированный.

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

В моем JavaScript у меня есть следующий код:

var incidentWizard = ['page1.html','page2.html','page3.html'];
var magicWizard = ['page1.html','page2.html','page3.html'];
var loadedURL = 'page1.html';

Вход для этой функции будет (правда, "инцидент")

function(next,wizardname)
 {

   var WizSize = incidentWizard.length; 
    wizardName = [wizardName] + 'Wizard';

   var wizardPOS = jQuery.inArray(loadedURL,incidentWizard);

А теперь я хочу использовать параметр wizardname, чтобы решить, какой массив я собираюсь использовать...

Loader(incidentWizard[wizardPOS],true);

Я тоже пробовал

Loader([incidentWizard][wizardPOS],true);

а также

Loader([incidentWizard][wizardPOS],true);

Также функция загрузчика просто требует строковое значение в массиве в WizardPOS извините за путаницу

Но когда я пытаюсь это сделать, я всегда получаю результат...

/incidentWizard  

Я знаю, что это как-то связано с использованием вычисленных значений, но я попытался прочитать о них и не могу решить эту проблему.

В основном я хочу использовать вычисленное значение wizardName для доступа к массиву с таким именем.

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

3 ответа

Решение

На этой линии:

wizardName = [wizardName] + 'Wizard';

Вы пытаетесь объединить строку "Wizard" в Array с одним строковым элементом "инцидент". Я предполагаю, что вы просто хотите обычную конкатенацию строк:

wizardName = wizardName + 'Wizard';

Однако теперь у вас есть только строка, а не экземпляр массива. Чтобы это исправить, измените способ определения *Wizard массивы что-то вроде:

var wizardyThings = {
    incidentWizard : ['page1.html','page2.html','page3.html'],
    magicWizard: ['page1.html','page2.html','page3.html']
};

Тогда ваша функция (которой не хватает имени в ее нынешнем виде) становится:

function someMethod(next, wizardname) {

    wizardName = wizardName + 'Wizard';
    var wizSize = wizardyThings[wizardName].length;

    var wizardPOS = jQuery.inArray(loadedURL, wizardyThings[wizardName]);
    ...
}

Я бы просто поместил каждый массив как опору на объект:

var obj {
    incidentWizard: ['page1.html','page2.html','page3.html'],
    magicWizard: ['page1.html','page2.html','page3.html']
};

Тогда вы можете просто сделать obj['incidentWizard'] или же obj.incidentWizard это вернется:

['page1.html','page2.html','page3.html']

Таким способом вы можете получить доступ только к свойствам объектов. Для глобальных ценностей window[ name ] буду работать. Для простых локальных переменных это просто невозможно вообще. То есть, если внутри функции у вас есть

var something;

тогда нет никакой возможности получить эту переменную, если у вас есть только строка "что-то".

Другие вопросы по тегам