Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Хитрый подсчет в массиве (https://javascript.ru/forum/misc/67647-khitryjj-podschet-v-massive.html)

Zmicer 01.03.2017 09:09

Хитрый подсчет в массиве
 
Добрый день! Хочу уточнить, имеется ли простое решение у след. задачи. Есть массив:
var arr = [];
arr [0] = "1 + 2  ";
arr [1] = "3* 2 ";
arr [2] = "2+5 ";
arr [3] = "1 +2";

Там разное количество пробелов, их надо сохранить. Можно ли получить массив такого вида:
arr [0] = "1 + 2 =3";
arr [1] = "3* 2 =6";
arr [2] = "2+5 =7";
arr [3] = "1 +2=3";

Т.е. посчитать и написать результат после равно, не используя кучу дополнительных действий. Что-то у меня получается уж очень громоздко. Спасибо!

destus 01.03.2017 09:16

var arr = [];
arr [0] = "1 + 2  ";
arr [1] = "3* 2 ";
arr [2] = "2+5 ";
arr [3] = "1 +2";

var newArr = arr.map(str => `${str}=${eval(str)}`);
alert(newArr);

Zmicer 01.03.2017 09:21

Цитата:

Сообщение от destus (Сообщение 445950)
var newArr = arr.map(str => `${str}=${eval(str)}`);
alert(newArr);

Ого, как просто оказывается! А не подскажете, где можно что-нибудь найти прочитать про этот элегантный способ? А то мне, как новичку, понять Ваш код кажется сложновато

destus 01.03.2017 09:22

Zmicer,
https://learn.javascript.ru/es-string

Zmicer 01.03.2017 09:25

Цитата:

Сообщение от destus (Сообщение 445952)

Спасибо, буду разбираться!

Zmicer 01.03.2017 10:11

Цитата:

Сообщение от destus (Сообщение 445950)
var arr = [];
arr [0] = "1 + 2  ";
arr [1] = "3* 2 ";
arr [2] = "2+5 ";
arr [3] = "1 +2";

var newArr = arr.map(str => `${str}=${eval(str)}`);
alert(newArr);

Хочу еще спросить, если например нужно сделать нестандартное действие, например возведение в степень, записано следующим образом:
arr [4] = "3 ^2";
Тут же, как минимум, нужно запустить метод Math.pow(3,2)
как тут можно модифицировать Ваш код?

destus 01.03.2017 10:20

Zmicer,
var arr = [];
arr [0] = "1 + 2  ";
arr [1] = "3 ^2 ";
arr [2] = "2+5 ";
arr [3] = "1 +2";

var newArr = arr.map(str => `${str}=${eval(str.replace('^', '**'))}`);
alert(newArr);

Zmicer 01.03.2017 10:22

Как просто:)

Zmicer 01.03.2017 10:29

Цитата:

Сообщение от destus (Сообщение 445961)
destus,

Я уже вас замучил, но еще один вопрос (обещаю - последний) - если все же надо посчитать что-нибудь сложнее, скажем
arr [5] = "12 #2"; вычисление наибольшего общего делителя?

destus 01.03.2017 10:33

Zmicer,
математика ограничивается модулем Math :( Выбирай что-то из этого https://developer.mozilla.org/ru/doc...etic_Operators


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