Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript While循环,额外循环,即使条件为false_Javascript_Loops_While Loop_Conditional Statements_Cycle - Fatal编程技术网

Javascript While循环,额外循环,即使条件为false

Javascript While循环,额外循环,即使条件为false,javascript,loops,while-loop,conditional-statements,cycle,Javascript,Loops,While Loop,Conditional Statements,Cycle,我正在使用javascript,但我正在寻找一种可能适用于多种语言的通用解决方案 我想有一个while循环,比它应该运行的时间长一倍 例如(假设上述变量已定义): 因此,上述代码的输出将使tempStr的最后一个字符为“>” 要记住的重要一点是,我不是简单地想做这样的事情: while (x != ">") { i++; tempStr += x; x = text[i]; } tempStr += x; 上面只是一个例子,在它的条件为false之后,可以方便地运

我正在使用javascript,但我正在寻找一种可能适用于多种语言的通用解决方案

我想有一个while循环,比它应该运行的时间长一倍

例如(假设上述变量已定义):

因此,上述代码的输出将使
tempStr
的最后一个字符为
“>”

要记住的重要一点是,我不是简单地想做这样的事情:

while (x != ">") {
    i++;
    tempStr += x;
    x = text[i];
}
tempStr += x;
上面只是一个例子,在它的条件为false之后,可以方便地运行while循环进行最后一个循环。尽管我不能与您共享我的实际代码(出于法律原因),但我要知道,对于我心目中的应用程序来说,上面的代码并不是一个解决方案

可能无法执行我正在尝试执行的操作,如果是,请告诉我:)

虽然它不是很有说服力,但它肯定会做你想做的事情

假设最后一个循环的结尾处的
条件
为false

是的,do…while()构造在大多数语言中都存在


根据Mike的评论,使用do循环:

var tempStr = '';
var x, i=0;

do {
    x = text[i++];
    tempStr += x;
} while (x != '>')
请注意,您可能应该有一个替代限制,以防止在x从不“>”的情况下出现无止境循环,例如

或类似的。此外,还测试通过索引访问字符串在所有浏览器中都有效,有些浏览器不允许这样做(较旧的IE),因此最好使用:

    x = text.substr(i++, 1);


事实上,我只是想到了一些事情。不过我还没有测试过。 (esdebon也提出了这个建议,我只是在发布这个之前没有看到)


这符合你的要求吗

if( x != ">" ) tempStr += x;
while (x != ">") {
    x = text[++i];
    tempStr += x;   
}

如果
x
不等于
'>

你说你不想在while之后使用代码,这将使
tempStr
的最后一个字符保留为
。。。如

while (x != ">") {
    i++;
    tempStr += x;
    x = text[i];
}
tempStr += x;
但是您也会说,
do{}while
不起作用,因为条件必须是validate。。但是 如果必须验证该条件,则意味着您的代码置于循环之外。。但在。。您的示例仅在代码如下时有效

x = text[i=0];
while (x != ">") {
    i++;
    tempStr += x;
    x = text[i];
}
for(var i=0;text.length>0;i++)
{
    var x = text[i]; //get the char
    tempStr += x;//do somthing..like..append
    if(x==">")//is the last one admissible
        break;
}
所以我真的不认为循环外有代码的问题。。除非你做一些非正统的代码,比如

for(x = text[i=0];(tempStr = tempStr +x).substring(tempStr.length-1) != ">";x = text[i])  
    i++
但这是最糟糕的解决方案。。不管问题是什么。。 无论如何。。当我进行解析或字符串操作时,我需要追加最后一个字符 通常我的代码是这样的

x = text[i=0];
while (x != ">") {
    i++;
    tempStr += x;
    x = text[i];
}
for(var i=0;text.length>0;i++)
{
    var x = text[i]; //get the char
    tempStr += x;//do somthing..like..append
    if(x==">")//is the last one admissible
        break;
}

我想说的是,你的条件应该被调整,这样当它为假时,就不需要再运行一次了。行吗?你可以使用一个“if”,然后使用一个“do循环”,也许是一个do循环,用一个带有初始条件的
if
语句包装起来?@esdebon-嘿,你打败我了!是不是应该是
|
?将while循环与
|
和if语句一起使用,还是将if语句放在外面,将do while放在if语句中?我想你在OP中说过,你不能让代码在while循环之外运行。如果不是这样的话,那么你在那里发布的第二个东西有什么问题吗?
做……而
在开始时额外执行循环代码,而不是在结束时,正如你从用户对自己问题的回答中看到的那样,这是不相关的。do循环不起作用,因为即使条件为false,它也会执行一次。我尝试只在满足条件时开始循环,然后在结束时运行一次额外的时间。然后您应该在问题中指定这一点。您需要两个测试,一个启动循环,一个停止循环。没有if..while循环,但您可以在if.if中嵌套一段时间。如果您现在选择自己的答案,那就太蹩脚了。这里有10个人知道该怎么做。你只是从来没有选择它,直到它回答了你问题中不清楚的部分。
while (x != ">") {
    i++;
    tempStr += x;
    x = text[i];
}
tempStr += x;
x = text[i=0];
while (x != ">") {
    i++;
    tempStr += x;
    x = text[i];
}
for(x = text[i=0];(tempStr = tempStr +x).substring(tempStr.length-1) != ">";x = text[i])  
    i++
for(var i=0;text.length>0;i++)
{
    var x = text[i]; //get the char
    tempStr += x;//do somthing..like..append
    if(x==">")//is the last one admissible
        break;
}