我正在尝试编写一个循环,检查字符串以查看字符串中是否包含存储的变量,然后用存储的值替换该变量。我有一部分工作正常,但是在我的while循环之后代码停止并且不会运行。这是代码:
var output = document.getElementById('output');
String.prototype.replaceAll = function(search, replacement) {
var target = this;
return target.split(search).join(replacement);
};
var sortedVarArray = [
//[varName, value, units, complex?]
["d", 2, null, 0],
["h", 3, null, 0],
["u", "d + h", null, 1]
];
var value = 'u + 1';
var complex = true;
while (complex) {
complex = false;
for (var i = 0; i -1 < sortedVarArray.length; i++) {
if (value.indexOf(sortedVarArray[i][0]) > -1 && sortedVarArray[i][3] == 1)
complex = true;
value = value.replaceAll(sortedVarArray[i][0], sortedVarArray[i][1]);
if (complex) break;
}
output.innerHTML += "<br> hello";
}
output.innerHTML += "<br> hello2";
var result = eval(value);
output.innerHTML += "<br> result = " + result;
<div id="output"></div>
所以,例如,如果我有一个类似的数组sortedVarArray
:
sortedVarArray = [
["varName", "value", "units", "complex?"]
["d", 2, null, 0]
["h", 3, null, 0]
["u", "d + h", null, 1]
]
且等式value
等于u + 1
,随着循环的进行,应该改变为这样:
u + 1
d + h + 1
2 + h + 1
2 + 3 + 1
然后将在最后评估为6
我的问题是代码不会超出for
循环,除非它breaks
,然后它不会使它超出while
循环。我的代码永远不会评估。
我的代码中有一堆输出消息(在这里清理过),我可以看到字符串value
正在根据代码循环进行修改。我不确定为什么在循环结束后它没有继续。
哦,如果我更改代码以便将complex
声明为false,则会跳过循环并将"hello2"
打印到output
。
提前致谢,
丹
编辑:ReplaceAll函数包含在脚本的开头(任何函数之外),如下所示:
String.prototype.replaceAll = function(search, replacement) {
var target = this;
return target.split(search).join(replacement);
};
答案 0 :(得分:2)
:
i - 1 < sortedVarArray.length
将为索引0迭代数组到length,其中array [length] = undefined。尝试:
i < sortedVarArray.length