簡體   English   中英

Array.indexOf還是之間?

[英]Array.indexOf or between?

我目前正在設計一個允許用戶定義一些邏輯的GUI。 我不希望它變得太復雜,所以我將它限制在一組括號中。 因此,我們的想法是檢查開口和閉合支架之間是否有任何其他開口支架。

例如。 IF ( a + b OR **(** b+ c)IF ( a + b OR **(** b+ c)錯誤警告。

所以我決定采用以下方式:

  • 找到第一個開放式支架
  • 找到第一個關閉括號
  • 使用這些索引搜索並查找任何打開的括號
  • 如果找到任何打開括號,則顯示錯誤
  • 繼續循環任何其他邏輯

這是代碼。 我認為它非常可怕,我相信必須有更好的方法來做到這一點。 某種IndexOf也許吧。

<select rel="OpenBracket" id="open1">
    <option value=""></option>
    <option value="(">(</option>
</select>
Some True/Fale here
<select rel="CloseBracket" id="close1">
    <option value=""></option>
    <option value=")">)</option>
</select>
AND
<br />
<select rel="OpenBracket" id="open2">
    <option value=""></option>
    <option value="(">(</option>
</select>
Some True/Fale here
<select rel="CloseBracket" id="close2">
    <option value=""></option>
    <option value=")">)</option>
</select>
<button onclick="javascript:TestingRules();">Check</button>

function GetOpenBrackets() {
    var openBracketArray = [];
    jQuery('[rel="OpenBracket"]').each(function() {
        if (jQuery(this).val() == "(") {
            openBracketArray.push(jQuery(this).attr('id'));
        } else {
            openBracketArray.push(jQuery(this).val());
        }

    });
    return openBracketArray;
}

function GetCloseBrackets() {
    var closeBracketArray = [];
    jQuery('[rel="CloseBracket"]').each(function() {
        if (jQuery(this).val() == "(") {
            closeBracketArray.push(jQuery(this).attr('id'));
        } else {
            closeBracketArray.push(jQuery(this).val());
        }
    });
    return closeBracketArray;
}
function TestingRules() {
    var openBrackets = GetOpenBrackets();
    var closeBrackets = GetCloseBrackets();
    var closeBracketIndex;
    var openBracketIndex;
    for (openBracketIndex in openBrackets) {
        if (openBrackets[openBracketIndex] !== "") {

            var foundCloseBracketIndex = -1;
            for (closeBracketIndex in closeBrackets) {
                if (openBracketIndex <= closeBracketIndex) {
                    if (closeBrackets[closeBracketIndex] !== "") {
                        foundCloseBracketIndex = closeBracketIndex;
                        break;
                    }
                }
            }
            if (foundCloseBracketIndex > -1) {
            var openBracketCheck;
                for (openBracketCheck in openBrackets) {

                    if (openBracketIndex < openBracketCheck && closeBracketIndex >= openBracketCheck) {
                        if (openBrackets[openBracketCheck] !== "") {
                            alert('error');
                        }
                    }

                }
            }
        }

    }

    // for testing:
    //  console.log(OpenBracketArray.length);
}

為什么不保持計數器,或計算paren堆棧深度? 如果你為開放的parens,dec關閉,並且計數器超過1,你就會出錯。 (如果我已正確理解你的要求。)

相信你可以簡單地嘗試實施

概念stack(top=0)

每當你看到(和。 push(top=top+1)push(top=top+1)

[(可選)如果top> X,其中X是允許的深度,錯誤輸出無效表達式長度]

每當你看到pop(top=top-1) )

當表達式完成並且stack(top>0)上仍然有任何東西stack(top>0)您可以推斷出表達式不平衡。

而不是試圖找到一對括號,為什么不直接搜索連續兩個開放括號? 當您找到第一個開放式括號時,可能會出現以下兩種情況之一:后面的內容用近括號括起來(因此用戶沒有嵌套它們),或者您找到另一個開放式括號。 如果找到另一個開括號,則用戶正在嘗試嵌套語句。 這使您無需返回並再次搜索相同的空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM