在Javascript/jQuery中比较多个元素值的简洁方法

Concise way to compare multiple element values in Javascript/jQuery?

本文关键字:元素 简洁 方法 Javascript jQuery 比较      更新时间:2023-09-26

也许我错过了什么,但是有没有一种更好/更简洁的方式来写这样的东西:

var a=1,
    b=2,
    c=3;
if(a===1 && b===1 && c===1){ do something };

if(a===1 || b===1 || c===1){ do something };

我试图保持代码小,所以我不寻找通过数组迭代等,就像我遇到的页面中提出的那样。我认为会有一些东西(至少对于第一个例子来说,它们都是相同的)看起来像

if(a=b=c===1){ do something? };

谢谢!

您可以采用函数式方法,并创建一个简单的比较函数生成器:

function eq(val) {
    return function(x) {
        return x === val
    }
}

然后用.every代替&&:

if ([a,b,c].every(eq(1))) {
    // all were equal
}

或者用.some代替||:

if ([a,b,c].some(eq(1))) {
    // at least one was equal
}

还可以创建一个接收条件结果的函数和一个在条件为真时调用的函数:

function when(cond, fn) {
    if (cond)
        fn.call.apply(fn, [].slice.call(arguments, 2))
}

并将您的if体封装到函数中…

function doIt(arg1, arg2) {
    console.log("doing it!")
    console.log(this, arg1, arg2)
}

然后像这样使用:

when([a,b,c].every(eq(1)), doIt, null, "foo", "bar")

when的第三个参数设置回调函数的this值,后面的参数作为参数传递给回调函数。

没有。你必须逐个检查。JavaScript只是没有一个操作符。

您的if(a=b=c===1){ ...(我意识到只是一个例子)将设置 abtrue(如果c===1)或false(如果没有),然后仅基于c===1进行分支。

我的意思是,对于特定的情况,有一些数学方法,但在一般情况下,没有

这将是一个可能的解决方案,取决于你想投资多少:

var slice=Function.call.bind([].slice)
var checkCondition=function(condition){ 
    return function(){
        return slice(arguments).reduce(function(o,n){
            return o && o == condition(n);
        },true);
    }
}
greater5=checkCondition(function(x){ return x>5; });
console.log(greater5(4,7));

如果在代码中只有一两次需要检查多个变量,那么这绝对是多余的。但是,如果您有多个具有不同参数的位置,它可能会有所帮助。

您可以通过定义另一个函数轻松地定义新的检查,并添加任意多的变量。