2014-10-25 1 views
0

Для калькулятора, который я создаю, у меня есть массив с операторами, в котором мне нужно знать, появляется ли знак времени до или после знака деления. для этого я имел следующий код (используя inArray JQuery в):Как определить, какое значение имеет меньший индекс в массиве

if ($.inArray('*', operators) < $.inArray(':', operators)) { 
    //Multiplication is before division so perform mulitplication 
} 
else { 
    //Division is before multiplication so perform division 
} 

Теперь этот код выполняется в цикле, и каждый раз, когда он снимает оператор он нашел из массива. Это означает, что в какой-то момент могут быть только умножения в массиве и без делений. В случае, когда функция inArray вернется, например, для умножения, и -1 для деления. Что вы получаете:

if (3 < -1) ---> false 

Поэтому он считает, что нашел знак разделения, где его нет.

Он также должен работать, когда это наоборот: нет mulitplication, а только разделение (ы).

Я не могу найти решения, чтобы исправить это, так что это привело меня сюда.

ответ

0

Теста, есть ли какое-то разделение первое:

if ($.inArray(':', operators) == -1 || $.inArray('*', operators) < $.inArray(':', operators)) { 
+0

Это будет оценивать ложь, потому что, когда нет никакого разделения '$ .inArray («:», операторы)! = -1' будет ложным, так что все будет ложным. – Creator13

+0

Спасибо, я изменил логику. – Barmar

0

Почему бы вам не использовать хэш, который использует операторы (строки) в качестве ключей и возвращает уровень приоритета (целое число) в качестве значения?

Некоторые операторы имеют одинаковый уровень приоритета, например, плюс и минус.

Адрес precedence table for C++ operators, что добавит больше чем вам нужно, но должно дать вам представление.

0

Одно быстрое и грязное исправление заключается в добавлении дополнительной проверки на возврат «-1».

var divIndex = $.inArray(":", operators) 
var multiIndex == $.inArray('*', operators) 

if (divIndex != -1 && multiIndex < divIndex) { 
    // multiplication is before division 
} else if (divIndex == -1 && multiIndex != -1) { 
    // only multiplication left 
} else if (divIndex != -1 && divIndex < multiIndex) { 
    // division before multiplication 
} 
0

Вы пробовали это?

if ($.inArray('*', operators) < $.inArray(':', operators) || $.inArray(':', operators < 0)) { 
    ... 
Смежные вопросы