Привет
Хочу создать такую функцию, чтобы она сравнивала не только числа, но и выражения, т. е в промпте писал пример, типа 1+1 и во втором промпте тоже самое, и в алерте было типа 2 равно 2
JavaScript
Java script,переменные, промпт, алерт
Шта?
Есть такая функция eval. Она как раз это делает. Но ее не рекомендуют использовать - через нее можно внедрить вредоносный код. Парсинг строки в математическое выражение вручную задача не самая простая. У меня вот такая функция получилась. Кстати, там учитывается приоритет умножения и деления на сложением и вычитанием и можно вводить десятичную точку.
>>>
var a = prompt();
var b = prompt();
function solve(arg) {
let s = arg;
// разделяем на числа и знаки
let ss = s.split('');
let st1 = [];
for (var i = 0; i < ss.length - 1; i++) {
if ((!isNaN(ss[i]) && (isNaN(ss[i + 1]) && ss[i + 1] != '.')) || ((isNaN(ss[i]) && ss[i] != '.' ) && !isNaN(ss[i + 1]))) {
ss.splice(i + 1,0,' ');
i++;
//console.log(ss[i])
}
}
sss = ss.join('').split(' ');
//отрицательные числа
if (sss[0] == '-'){
let changeFirstABS = -sss[1];
sss[1] = changeFirstABS;
sss.splice(0,1);
}
for (var i = 0; i < sss.length; i++) {
if(sss[i].length >= 2 && isNaN(sss[i])){
if (sss[i].charAt(1) == '-'){
console.log(-sss[i+1]);
let changeABS = -sss[i+1];
sss[i+1] = changeABS;
}
let t = sss[i].substring(0,1);
sss[i] = t;
}
}
//отрицательные числа
for (var i = 0; i < sss.length; i++) {
if (!isNaN(sss[i]) || sss[i] == '+' || sss[i] == '-') {st1.push(sss[i])}
else {
console.log(st1);
// умножение
if (sss[i] == '*') {
console.log(' mult ', st1, sss[i - 1], sss[i + 1]);
res = sss[i - 1] * sss[i + 1];
i++;
//console.log('before',st1);
//console.log(st1[st1.length - 1]);
st1[st1.length - 1] = res;
//console.log('after',st1);
}
// деление
if (sss[i] == '/') {
res = sss[i - 1] / sss[i + 1];
i++;
st1[st1.length - 1] = res;
}
}
}
console.log('st1:',st1);
// подсчитываем результат
res = +st1[0];
console.log('first',res);
for (var i = 0; i < st1.length; i++) {
if (st1[i] == '+') {
console.log(true, st1[i + 1]);
res += +st1[i + 1];
console.log('res', res);
}
if (st1[i] == '-') {
res -= +st1[i + 1];
}
}
return res;
}
alert(solve(a)+solve(b));
>>>
var a = prompt();
var b = prompt();
function solve(arg) {
let s = arg;
// разделяем на числа и знаки
let ss = s.split('');
let st1 = [];
for (var i = 0; i < ss.length - 1; i++) {
if ((!isNaN(ss[i]) && (isNaN(ss[i + 1]) && ss[i + 1] != '.')) || ((isNaN(ss[i]) && ss[i] != '.' ) && !isNaN(ss[i + 1]))) {
ss.splice(i + 1,0,' ');
i++;
//console.log(ss[i])
}
}
sss = ss.join('').split(' ');
//отрицательные числа
if (sss[0] == '-'){
let changeFirstABS = -sss[1];
sss[1] = changeFirstABS;
sss.splice(0,1);
}
for (var i = 0; i < sss.length; i++) {
if(sss[i].length >= 2 && isNaN(sss[i])){
if (sss[i].charAt(1) == '-'){
console.log(-sss[i+1]);
let changeABS = -sss[i+1];
sss[i+1] = changeABS;
}
let t = sss[i].substring(0,1);
sss[i] = t;
}
}
//отрицательные числа
for (var i = 0; i < sss.length; i++) {
if (!isNaN(sss[i]) || sss[i] == '+' || sss[i] == '-') {st1.push(sss[i])}
else {
console.log(st1);
// умножение
if (sss[i] == '*') {
console.log(' mult ', st1, sss[i - 1], sss[i + 1]);
res = sss[i - 1] * sss[i + 1];
i++;
//console.log('before',st1);
//console.log(st1[st1.length - 1]);
st1[st1.length - 1] = res;
//console.log('after',st1);
}
// деление
if (sss[i] == '/') {
res = sss[i - 1] / sss[i + 1];
i++;
st1[st1.length - 1] = res;
}
}
}
console.log('st1:',st1);
// подсчитываем результат
res = +st1[0];
console.log('first',res);
for (var i = 0; i < st1.length; i++) {
if (st1[i] == '+') {
console.log(true, st1[i + 1]);
res += +st1[i + 1];
console.log('res', res);
}
if (st1[i] == '-') {
res -= +st1[i + 1];
}
}
return res;
}
alert(solve(a)+solve(b));
Ну так и пиши все по порядку. В чем проблема?
Парсинг строки на математические выражения.
Похожие вопросы
- JAVA SCRIPT true , false Для чего нужны эти значения переменным?
- В чем разница C++ и Java-Script
- Java script (нужен код для wallpeper engine)
- Как сделать проверку пустоты массива в Java Script .
- Здравствуйте, друзья! Нужна помощь в CSS3, HTML 5 и Java Script
- Шахматная доска Нужен код шахматной доски используя java script и table-td-tr,напишите код пожалуйстаю
- Java Script задание с массивом
- Что может ява скрипт (Java Script)? Опишите в кратце.
- подключение и доступ к файлам java script
- Java Script простым языком