Напишите рабочие итерированные переменные через цикл с помощью jQuery / javascript - PullRequest
0 голосов
/ 28 ноября 2011

Используя jQuery, как мне написать функцию цикла в стиле forEach, где при каждом взаимодействии фактическое число имени переменной увеличивается (и все еще работает!)?

Насколько я понимаю, это можно сделать с помощью "eval", но, очевидно, это плохая практика, потому что она замедляет все - особенно в цикле.

Какой альтернативный метод? то есть результат по существу:

var1 = ((var1a) * foo) + var1b;

var2 = ((var2a) * foo) + var2b;

var3 = ((var3a) * foo) + var3b;

var4 = ((var4a) * foo) + var4b;

Ответы [ 3 ]

0 голосов
/ 28 ноября 2011

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

Вместо этого вы должны сделать:

function doStuff(data, foo) { ... }

result = 0;
result += doStuff(someData1, operation);
result += doStuff(someData2, operation);

Вы также можете расширить doStuff дополнительным параметром, таким как startingPoint, если вынеобходимо передать значение результата для работы с ним.

function doStuff(data, foo, startingPoint) { ... }

result = 0;
result += doStuff(someData1, operation, result);
result += doStuff(someData2, operation, result);
0 голосов
/ 28 ноября 2011

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

var data = {{data1a,data1b,data1c},{data2a,data2b,data2c}};
function myFunction(functionNumber){
    return data[functionNumber][0] * foo + data[functionNumber[1]; //functionNumber is 0 based
}

, но при условии, что ваша реальная ситуация имеет немного больше смыслачем ваш пример, возможно, что-то вроде:

var functions = {};
var data ={}; //adjust for data source like {dataA = data1A, dataB=data1B};
var i = 1;
$.each(data, function(key, value){
    functions[i++] = ((key) * foo) + value;
});
0 голосов
/ 28 ноября 2011

Используйте ECMAscripts скобка для доступа к свойствам или методам внутри объекта.

var foo = {
    meth1: function() {},
    meth2: function() {},
    meth3: function() {}
};

Object.keys( foo ).forEach(function( name ) {
    foo[ name ]();
});
...