[英]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.