Показать сообщение отдельно
  #13 (permalink)  
Старый 08.02.2015, 14:37
Интересующийся
Отправить личное сообщение для scruwi Посмотреть профиль Найти все сообщения от scruwi
 
Регистрация: 24.11.2014
Сообщений: 13

Сообщение от danik.js Посмотреть сообщение
var array = ['x', 'y', 'z'],
    expression = "x+y+z";
 
var scope = new Scope(array);
 
var result = eval('with(scope){' + expression + '}');
alert(result);

function Scope(array){
   this[array[0]] = 1;   // x=1
   this[array[1]] = 2;   // y=2
   this[array[2]] = 3;   // z=3
}
спасибо. мне тут еще кое-что незнакомо, но разберусь.
я пока проблему свою решил по-другому. не знаю, насколько элегантно, но думаю с регекспами это конечно очень медленно:

var array = somefunc(),
    expression = 'x+y+z',
    result = '';

expression = expression.replace(/([a-z])+/g, "array['$1']"); // array['x']+array['y']+array['z']
result = eval(expression);
alert(result);

function somefunc() {
    array = { // параметры разобрал на ассоциативный массив
        'x': 1,
        'y': 2,
        'z': 3 };
    return array;
}

Последний раз редактировалось scruwi, 08.02.2015 в 14:45.
Ответить с цитированием