Javascript 格式化if语句的更简单方法?
我有一个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(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语句的格式,它的作用很明显,而且在我看来不需要更改。要准确确定您要计算的是真是假有点困难,但是可以稍微调整一下,以获得您想要的结果
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
}