Как преобразовать строку чисел в массив чисел?

Предполагая, что это какая-то домашняя работа, и вы хотите сделать это сами ..

Я сделал это один раз, вам нужен стек

. Итак, что вы делаете для примера, :

    parse    what to do?                Stack looks like
      (      push it onto the stack     (
      5      push 5                     (, 5
      +      push +                     (, 5, +
      2      push 2                     (, 5, +, 2
      )      evaluate until (           7            
      *      push *                     7, *
      7      push 7                     +7, *, 7
      eof    evaluate until top         49

Символы типа «5» или «+» могут быть просто сохранены как строки или простые объекты, или вы можете сохранить объект + в качестве объекта + (), не устанавливая значения и не устанавливая их когда вы оцениваете.

Я предполагаю, что это также требует порядка приоритета, поэтому я опишу, как это работает.

в случае: 5 + 2 * 7

вам нужно нажать 5 push + push 2, следующий op - более высокий приоритет, поэтому вы также нажимаете его, затем нажмите на три. Когда вы сталкиваетесь либо с a), либо с концом файла или с более низким или равным приоритетом, вы начинаете вычислять стек до предыдущего (или начала файла.

Поскольку ваш стек теперь содержит 5 + 2 * 7, когда вы его оцениваете, сначала вы набираете 2 * 7 и нажимаете результирующий * (2,7) узел на стек, затем еще раз вы оцениваете три основные вещи в стеке (узел 5 + *), поэтому дерево Правильно.

Если было заказано другое: 5 * 2 + 7, вы нажимаете до тех пор, пока не попадете в стек с «5 * 2», тогда вы достигнете более низкого приоритета +, что означает оцените, что у вас есть сейчас. Вы оцениваете 5 * 2 в * узел и нажимаете его, а затем продолжаете, нажимая + и 3, чтобы у вас был * узел + 7, после чего вы оценили это.

Это означает, что у вас есть «самый высокий текущий приоритет», который хранит 1, когда вы нажимаете +/-, a 2, когда вы нажимаете * или / и 3 ​​для «^». Таким образом, вы можете просто проверить переменную, чтобы увидеть, будет ли ваш следующий оператор вл етс & lt; = ваш текущий приоритет.

if ")" считается приоритетом 4, вы можете рассматривать его как другие операторы, за исключением того, что он удаляет совпадение "(", более низкий приоритет не будет.

140
задан SunnyRed 31 July 2015 в 22:29
поделиться

2 ответа

иначе комбинация разделения и соединения

var a = "1,2,3,4";
var b= Number(a.split(",").join(""))
console.log(b);
0
ответ дан 4 November 2019 в 07:28
поделиться

Это очень просто. Такой как:

["1", "2", "3", "4"].map(i=>Number(i))
0
ответ дан 23 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: