2

I would like to specify the while's condition as a variable, something like:

function doWhile(condition){
    while(condition){
       number++;
    }
    alert(number);
}

var number = 1;
doWhile(number < 10);

1 Answer 1

4

The only way to do this is using functions.

function doWhile(condition, action, undefined) {
    var current = undefined;
    // call your condition with the current value
    while(condition(current)) {
        // do something with the current value then update it
        current = action(current);
    }
    return result;
}

var number = doWhile(function condition(number) {
    // if the current value has no value yet continue
    // if the current value is less than 10
    return number === undefined || number < 10;
}, function action(number) {
    // if the number has no value set it to 0
    if (number === undefined) {
         number = 0;
    }
    // increase it
    return ++number;
});
console.log(number);
Sign up to request clarification or add additional context in comments.

7 Comments

What, you don't want to run eval() in a loop? ;o) +1
@patrick_dw I was tempted. But I decided to do it properly. Besides if I show him the eval solution, he'll go "thats easier/nicer I'll just use that. What do you mean eval is bad? eval is fine!"
@Raynos: I saw that exact situation earlier this year, but with someone giving a solution using with. It took only a few minutes for OP to break his code, but was convinced that with was the solution anyway.
Well, it works, but I don't really understand what's going on :S, return number === undefined || number < 10; Why do I need the number === undefined part from here?
@CIRK the first call is undefined. You can initialize result = 0 if you want. But then it defaults to 0 instead of undefined and wouldn't work nicely with strings or arrays. I can imagine this looking alien if your not used to passing first class functions around like this.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.