Динамическое получение значения из группы массивов с помощью параметра, переданного функции - PullRequest
0 голосов
/ 15 декабря 2011

Я работаю над образовательным инструментом. Я хочу получить значение из одного из группы массивов на основе параметра, переданного в функцию. В частности, эта цель этого кода состоит в том, чтобы изменить текст метки в группе переключателей на основе выбора пользователем.

Вот мой код:

    //arrays
var bodyplan = ['Anguilliform', 'Compressiform', 'Depressiform', 'Filiform', 'Fusiform', 'Globiform', 'Sagittiform', 'Taeniform']

var caudalshape = ['Continuous', 'Emarginate', 'Forked', 'Lunate', 'Rounded', 'Truncate']

var mouthposition = ["Inferior", "Jawless", "Subterminal", "Superior", "Terminal"]

//function
function changelabels(opt1, opt2){
    var i = opt2
    var c = 1
    var index = 0
    while (i>=c){
        document.getElementById("rb" + c + "lbl").innerHTML = (opt1[index]) 
        c = c + 1
        index = index + 1}}

Вызов функции выполняется в инструкции switch, которая является довольно продолжительной. Например вот один из звонков:

case 4:
    changelabels("caudalshape", 6)

Код, который я создал выше, меняет метки, но не так, как нужно. В приведенном выше случае вместо того, чтобы мои радиокнопки были помечены как «Непрерывный», «Emarginate», «Forked» и т. Д., Они помечены как «c», «a», «u», «d» и так далее. Другими словами, функция, которую я написал, не извлекает значения из массива. Это просто выбор букв из слова параметра, переданного функции в соответствии с индексом.

Любая помощь будет оценена. Я относительный новичок в Javascript. Я пытался решить эту проблему в течение нескольких часов как при игре с кодом, так и при поиске на этих форумах.

Ответы [ 3 ]

1 голос
/ 15 декабря 2011

Если в вашей реализации что-то не хватает, вы хотите передать переменную caudalshape вместо строки:

case 4:
    changelabels(caudalshape, 6)
1 голос
/ 15 декабря 2011

Это потому, что вы работаете с строкой "caudalshape", а не с массивом, на который указывает переменная с именем "caudalshape".

Вы можете исправить это, передав массив, а не строку;

changelabels(caudalshape, 6)

Не имеет отношения к вашей проблеме; Вы должны действительно начать добавлять свои собственные точки с запятой в свой код. Да, это необязательно в JavaScript, но не во многих других, и к нему трудно приспособиться, когда придет время изучать другой язык (личный опыт). Для получения дополнительной информации см. Рекомендуете ли вы использовать точки с запятой после каждого оператора в JavaScript?

0 голосов
/ 15 декабря 2011

1-й есть некоторый избыточный код, который я удаляю для вашей справки.а также всю отсутствующую точку с запятой.

    //arrays
var bodyplan = ['Anguilliform', 'Compressiform', 'Depressiform', 'Filiform', 'Fusiform', 'Globiform', 'Sagittiform', 'Taeniform'];

var caudalshape = ['Continuous', 'Emarginate', 'Forked', 'Lunate', 'Rounded', 'Truncate'];

var mouthposition = ["Inferior", "Jawless", "Subterminal", "Superior", "Terminal"];

//function
function changelabels(opt1, opt2){
    var index = 0;
    while (index < opt2){
        document.getElementById("rb" + (index+1) + "lbl").innerHTML = opt1[index];
        index = index + 1;
        }
  }

Вот исправление: : передаваемый параметр является строкой, вы должны передать переменную массива

case 4:
    changelabels(caudalshape, 6);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...