Array.indexOf 或介于两者之间
Array.indexOf or between?
我目前正在设计一个允许用户定义一些逻辑的GUI。 我不希望它变得太复杂,所以我将其限制为一组括号。因此,我们的想法是检查在左括号和右括号之间没有任何其他左括号。
例如。 IF ( a + b OR **(** b+ c)
会发出错误警报。
所以我决定采用以下路线:
- 查找第一个开括号
- 查找第一个右括号
- 使用这些索引在 之间搜索并查找任何左括号
- 如果找到任何左括号,则显示错误
- 继续循环任何其他逻辑
这是代码。我认为这非常可怕,我相信一定有更好的方法来做到这一点。 也许是某种索引。
<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);
}
为什么不只保留一个计数器,或者计算参数堆栈深度?如果您 inc 表示打开 parens,dec 表示关闭,并且计数器高于 1,则会出现错误。(如果我正确理解了您的要求。
我相信
你可以简单地尝试实现
概念stack(top=0)
和
push(top=top+1)
,只要你看到(
和
[(可选)如果 top>X ,其中 X 是允许的深度,则错误地输出无效的表达式长度]
pop(top=top-1)
每当你看到)
.
当表达式完成并且您仍然有任何剩余stack(top>0)
您可以推断表达式不平衡时。
与其尝试查找一对括号,为什么不连续搜索两个左括号呢? 当您找到第一个左括号时,可能出现以下两种情况之一:后面的内容用右括号括起来(因此用户没有嵌套它们),或者您找到另一个左括号。 如果找到另一个左括号,则用户正在尝试嵌套语句。 这使您不必返回并再次搜索同一空间。
相关文章:
- jQuery淡入淡出动画在两者之间显示白色
- 两者之间有什么区别..函数中的参数和参数
- Array.indexOf 或介于两者之间
- 选择两种颜色并在两者之间选择n种颜色
- Regex,它搜索一个起始字符,介于两者之间的任何字符,然后是一个结束字符
- 这两者之间有什么区别
- 在两者之间执行 ajax 时粘贴到输入时缺少按键事件
- 正则表达式包括两个固定字符串和介于两者之间的所有内容
- 获取父对象并通过介于两者之间的窗体传递给其他方法
- 这两者之间有什么区别
- 字符、符号或数字之前或之后的空格;但是,不介于两者之间
- Javascript匹配字符并在两者之间添加空格
- 如何使用 HTML 或 CSS 或 JS 重叠两个图像并在两者之间划一条交叉线,如以下示例所示
- 指令和控制器之间的通信,中间作用域介于两者之间
- 如何将音频源与外部视频以及两者之间的交叉音量同步
- 都是'sync'event和Backbone.sync以某种方式连接在一起——两者之间有什么区别
- jQuery在列表中添加remove类,两者之间有延迟
- javascript匹配以“”开头的字符串;并以“;;以及介于两者之间的任何东西
- 正则表达式匹配介于两者之间的文本
- JavaScript onchange只适用于select 3和"all"但不是介于两者之间