Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как вызвать функцию с другими параметрами в зависимости от условия (https://javascript.ru/forum/misc/54045-kak-vyzvat-funkciyu-s-drugimi-parametrami-v-zavisimosti-ot-usloviya.html)

Basil_JS 01.03.2015 13:00

Как вызвать функцию с другими параметрами в зависимости от условия
 
Допустим, есть функция, принимающая параметр j и условие
if (num === 1)
{
function(1);
}
else if (num === 2)
{
function(1);
function(2);
}
else if (num === 3)
{
function(1);
function(2);
function(3);
}

Как записать это попроще и в обобщенному случае? То есть наподобие if (num === j)
{
сделай функцию j раз и с разными параметрами
}

Прошу помощи в этом. Просто не знаю даже как загуглить. Заранее спасибо.

laimas 01.03.2015 14:15

Функция может быть одна, и несколько раз ее вызывать нет смысла, если изменять надо только параметры ее. Значит передавайте в качестве параметров массив, в контексте примера от 1 до N.

Basil_JS 01.03.2015 14:58

А как записать не подскажете, ведь не так ведь - function ([1, 2, ...])?

laimas 01.03.2015 15:08

Ну если вы знаете содержимое массива, то почему и нет, можете и так передать function ([1, 2, ...]).

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

Basil_JS 01.03.2015 16:12

У меня ошибка в общем-то получается. Если смиотреть конкретней
function append(i)
{
document.getElementById('x'+self.X[i]+'y'+self.Y[i]).appendChild(self.cell1[i]);
}
Условие:
if (num === 8)
{
append(1);
append(2);
append(3);
...
append(8);
}

laimas 01.03.2015 16:23

Ну еще бы ее не было.

Еще раз сначала о методе передачи - у вас операнд определяет окончание последовательности, которую нужно передать в функцию. Так зачем повторять это число раз вызов функции, если можно передать срез массива заведомо известной коллекции или же просто передать этот операнд в функцию, выполнив это число раз действие в ней? При этом условий if (num === N) не требуется, просто append(num);

Что касается самой функции, то если это и все, то это бедлам.

ruslan_mart 01.03.2015 16:51

Basil_JS,

for(var i = 1; i <= num; i++) {
    myFunc(i);
}

Basil_JS 01.03.2015 17:15

Мне придется делать это 241 раз, и я очень сильно упростил, так что вполне оправдано не писать вот такое

function(1);
...
function(241);

ruslan_mart 01.03.2015 19:33

Basil_JS, лучше передавай тогда в ф-цию количество запусков, и пусть код внутри ф-ции выполняется столько количество раз, которому соответствует передаваемый аргумент.

function append(len) {
    for(var i = 1; i <= len; i++) {
        document.getElementById('x' + self.X[i] + 'y' + self.Y[i]).appendChild(self.cell1[i]);
    }
}




Тогда условия можно будет писать просто вот так:

if(num == 8) {
    append(8);
}


Но лучше тогда вообще условия убрать и использовать просто:

append(num);


Часовой пояс GMT +3, время: 21:26.