在循环

时间:2016-08-31 01:14:31

标签: javascript loops while-loop

我正在尝试编写一个循环,检查字符串以查看字符串中是否包含存储的变量,然后用存储的值替换该变量。我有一部分工作正常,但是在我的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);
};

1 个答案:

答案 0 :(得分:2)

在你的for循环中

i - 1 < sortedVarArray.length

将为索引0迭代数组到length,其中array [length] = undefined。尝试:

i < sortedVarArray.length