Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 08.02.2015, 06:52
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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
}
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #12 (permalink)  
Старый 08.02.2015, 11:32
Аспирант
Посмотреть профиль Найти все сообщения от freee
 
Регистрация: 05.02.2015
Сообщений: 51

Сообщение от scruwi
введите параметр №1: x=1
введите параметр №2: y=2
...
введите формулу: x+y
Че то ты намудрил, п-ц.
<html>
<head>
</head>
<body>
<script>
calc=function(){
 eval("var "+prompt("input variable"));
 eval("var "+prompt("input variable"));
 alert(eval(prompt("input expression")));
}
calc()

</script>

</body>
</html>
Ответить с цитированием
  #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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пож с JSON, передача id ссылки. wisma jQuery 22 10.02.2014 15:36
Область видимости переменной jquery Prazdnic Общие вопросы Javascript 7 04.01.2013 19:17
Область видимости переменной ацкий Общие вопросы Javascript 3 27.08.2011 14:09
область видимости Ultimatum Общие вопросы Javascript 2 19.06.2011 10:47
можно ли включить функцию в глобальную область видимости из файла maxval Элементы интерфейса 13 04.10.2009 07:11