如何确定哪个值在数组中具有较小的索引

时间:2014-10-25 18:03:00

标签: javascript jquery arrays

对于一个计算器我正在制作一个带有运算符的数组,我需要知道时间符号是在分号后面还是之后。为此,我有以下代码(使用JQuery的inArray):

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

现在这段代码在循环中运行,每次删除它从数组中找到的运算符。这意味着在某些时候阵列中只能有乘法而没有分割。在这种情况下,inArray函数将返回例如3用于乘法,并且-1用于除法。你得到了什么:

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

所以它认为它找到了一个分裂标志,没有。

当它反过来时它也必须工作:没有多重复制,但只有部门。

我无法想出解决方案来解决这个问题,所以这就把我带到了这里。

4 个答案:

答案 0 :(得分:0)

首先测试是否存在任何分割:

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

答案 1 :(得分:0)

为什么不使用使用运算符(字符串)作为键的哈希值并将优先级(整数)作为值返回?

某些运算符具有相同的优先级,如加号和减号。

这是precedence table for C++ operators,这比你需要的要多得多,但应该给你一个想法。

答案 2 :(得分: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
}

答案 3 :(得分:0)

你试过这个吗?

if ($.inArray('*', operators) < $.inArray(':', operators) || $.inArray(':', operators < 0)) {
  ...