开发者

Simpler way to format if statement?

I have an if statement:

if(firstString == "no" && secondString == "no" && thirdString == "no"){
    // Do stuff here
}

Is there a prettier way to format this? Using false instead of "no" is not an option, since the data I'm checking is from an AJAX request and I don't control its output. Otherwise I'd write it this way:

if(!firstString && !secondString && !thirdString){开发者_如何学编程
    // Do stuff here
}

Thanks

UPDATE:

I know this is totally ridiculous, but it occurred to me that this might actually be the shortest way:

if(firstString + secondString + thirdString == "nonono"){
    // Do stuff here
}


Given that the number of strings is known in advance, then you have 2 options as far as I can see..

  1. Leave it as it is. The if statement isn't hard to read, and any alternate formats will either be as complicated or more complicated.

  2. convert the strings to booleans when you retrieve the data from the AJAX request, so that you're storing TRUE or FALSE instead of "yes" and "no". That would allow you to use a your preferred if statement format, and might be more efficient than many string comparisons if you do a lot of them.

In the end, which you do is up to you, but personally I think it would be better to just stick with what you've got. Don't worry about formatting an if statement, it's pretty obvious what it does, and in my opinion doesn't need to change.


If( "no" == firstString && firstString == secondString && secondString == thirdString )


It was a little difficult to determine exactly what you are evaluating to true or false, but this can be tweaked a tad to get what you're looking for.

var checkStrings = function() {
    var no = "no",
        args = Array.prototype.slice.call(arguments);

    for (var i = 0, len = args.length; i < len; i++) {
        if (args[i] !== no) {
            return false;
        }
    }

    return true;
};

if (checkStrings(firstString, secondString, thirdString)) {
    // Do stuff here    
}


Sorry, wasn't thinking--this is if you were checking whether ANY were 'no'

if ($.inArray('no', [firstString, secondString, thirdString]) >= 0) {
    // Do something if the value is 'no'
}

UPDATED ANSWER

Unfortunately, jQuery doesn't have the reduce() function (another Array extra introduced in JS 1.6, but not available in older browsers) which would do the trick nicely.

Here's one way to check if all are 'no':

var found = true;
$.each([firstString, secondString, thirdString], function (i, str) {
    if (str !== 'no') {
        found = false;
    }
});

It may seem uglier, but it should be shorter if you have a lot more strings to check.

If you want it wrapped in a function you could do:

function allTrue (arr, checkStr) {
    var found = true;
    $.each(arr, function (i, str) {
        if (str !== checkStr) {
            found = false;
        }
    });
    return found;
}
if (allTrue([firstString, secondString, thirdString], 'no')) {
    // ...
}


function F(var value){
    return value === "no";
}

if(F(firstString) && F(secondString) && F(thirdString)){
    // Do stuff here
}


Another option, using jQuery.unique:

var uniques = $.unique([firstString, secondString, thirdString]);
if (uniques.length === 1 && uniques[0] === "no") {
  // do stuff
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜