Я пытаюсь написать цикл, который проверяет строку, чтобы увидеть, содержится ли хранимая переменная в строке, а затем заменяет эту переменную сохраненным значением. У меня есть эта часть, работающая нормально, однако после моего цикла while код останавливается и не запускается. Вот код:Код javascript не будет запущен после цикла
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
был объявлен как ложный, цикл пропускается и "hello2"
напечатан на output
.
Спасибо заранее,
Dan
EDIT: функция ReplaceAll содержится в начале сценария (за пределами какой-либо функции) и выглядит следующим образом:
String.prototype.replaceAll = function(search, replacement) {
var target = this;
return target.split(search).join(replacement);
};
'У меня есть массив, который выглядит sortedVarArray like' - не очень, потому что не будет действительным массивом - являются d, ч и и фактически строки«г»,«з»и «u» или значения d, h и u (которые вы не разделяете с нами) ... d + h на самом деле строка «d + h» или значение d + h? также, что такое 'replaceAll'? другую функцию, которую вы не поделили? –
@JaromandaX Да, это строки. Я отредактировал исходное сообщение, чтобы показать это, и добавил функцию replaceAll. –
У вас возникли ошибки в консоли? * «Моя проблема в том, что код не выходит из цикла for, если он не сломается» * - Почему бы и нет? Ничто внутри цикла 'for', кажется, не изменяет счетчик циклов' i' или массив 'sortedVarArray', так почему бы не закончить цикл' for', когда он доходит до конца массива? – nnnnnn