Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.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 格式化if语句的更简单方法?_Javascript_Jquery - Fatal编程技术网

Javascript 格式化if语句的更简单方法?

Javascript 格式化if语句的更简单方法?,javascript,jquery,Javascript,Jquery,我有一个if声明: if(firstString == "no" && secondString == "no" && thirdString == "no"){ // Do stuff here } 有没有更漂亮的方式来格式化这个?使用false而不是“no”不是一个选项,因为我检查的数据来自AJAX请求,并且我不控制其输出。否则我会这样写: if(!firstString && !secondString && !th

我有一个if声明:

if(firstString == "no" && secondString == "no" && thirdString == "no"){
    // Do stuff here
}
有没有更漂亮的方式来格式化这个?使用
false
而不是
“no”
不是一个选项,因为我检查的数据来自AJAX请求,并且我不控制其输出。否则我会这样写:

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

更新:

我知道这完全是荒谬的,但我想到这可能是最短的路:

if(firstString + secondString + thirdString == "nonono"){
    // Do stuff here
}
如果(“否”==firstString&&firstString==secondString&&secondString==thirdString)

对不起,我当时没有思考--这是如果您正在检查是否有“否”

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

不幸的是,jQuery没有reduce()函数(JS1.6中引入的另一个额外的数组,但在旧浏览器中不可用),这可以很好地实现这一功能

这里有一种方法可以检查是否全部为“否”:

var found = true;
$.each([firstString, secondString, thirdString], function (i, str) {
    if (str !== 'no') {
        found = false;
    }
});
它可能看起来更难看,但如果有更多字符串要检查,它应该更短

如果希望将其包装在函数中,可以执行以下操作:

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')) {
    // ...
}

假设字符串的数量是预先知道的,那么就我所知,您有两个选项

  • 让它保持原样。if语句并不难读,任何其他格式都会同样复杂或更复杂

  • 当您从AJAX请求中检索数据时,将字符串转换为布尔值,这样您就可以存储TRUE或FALSE,而不是“yes”和“no”。这将允许您使用首选的if语句格式,并且如果您进行大量的字符串比较,可能比许多字符串比较更有效


  • 最后,你该怎么做取决于你自己,但我个人认为最好还是坚持你所拥有的。不要担心if语句的格式,它的作用很明显,而且在我看来不需要更改。

    要准确确定您要计算的是真是假有点困难,但是可以稍微调整一下,以获得您想要的结果

    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    
    }
    
    var checkStrings=function(){
    var no=“否”,
    args=Array.prototype.slice.call(参数);
    对于(变量i=0,len=args.length;i
    另一个选项,使用jQuery.unique:

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

    字符串的数量是预先知道的,还是类似于可能包含任意数量字符串的数组?简短回答:不,没有很好的简化方法。谢谢您的帮助。这显然没什么大不了的,但我总是喜欢尽可能地想办法让事情变得更简单/更好。@kennis:你看你的最短路径也接受
    “non”+“+”ono“
    ,对吧?@maaartinus已知值总是“yes”或“no”,所以这并不重要。为什么你要否定函数中的等式,然后在函数外再次否定呢?只是因为对我来说,这比使用像
    IsFalse(value)这样的函数更直观
    这会不会是一项开销,因为将调用三个函数而不是三个比较?这些函数本质上只是一个比较,因此可能产生的“额外开销”是可以忽略的。已经发布并删除了等效的答案。这与原始代码的作用不同。如果任何变量为“否”,则返回true。他希望这三个都是。
    var uniques = $.unique([firstString, secondString, thirdString]);
    if (uniques.length === 1 && uniques[0] === "no") {
      // do stuff
    }