一次测试 2 个以上值的相等性的快速方法

A quick way to test equality of more than 2 values at once?

本文关键字:方法 一次 测试      更新时间:2023-09-26

我想知道是否有一种快速方法来测试 js 中两个以上值的相等性。类似于 (= 6 6 6)。

在控制台中,我尝试了类似...

1 == 1 == 1 == 1
true
2 == 2 == 2 == 2
false
0 == 0 == 0
false
0 == 0 == 0 == 0
true

。这很有趣,但也令人费解。

有没有一种快速的方法可以在 js 中做到这一点?

谢谢。

您出现意外行为的原因是我们需要稍微调整一下您对 js 的期望;) 2 == 2 == 2 == 2做了3个比较,都是从左到右。 第一个比较是最左边的2 == 2,其计算结果为 true。 之后,我们得到第一次比较的结果,与(在这种情况下)进行比较 第三2 . 即,true === 2,这是错误的。 最后,我们得到false === 2,这也是错误的。

这样

可视化可能会有所帮助:

(((2 == 2) == 2)

== 2)

我认为总的来说,a === b && b === c可能是你要找的。

编辑:啊,对不起,我一直在为===切换==。 这只是习惯。 这是我推荐的习惯。 ===运算符不执行类型强制转换,因此它计算的值正确,而不是值的强制转换版本。

这是因为true == 1true != 2

您可以尝试:

function isEquals() {
 var flag = true;
 for(var i=1; i<arguments.length; i++) flag = flag && (arguments[i] == arguments[0]);
  return flag;
}
isEquals(2,2,2); // true

或:

function isEquals() {
 var ar = arguments;
 return Array.prototype.every.call(arguments, function(a){return a==ar[0];});
}

是的,你可以,但你需要使用"逻辑运算符",如 &&&或 || 来检查 1 个以上的语句,如 (x<1 &&>0)。您可以将其用作快速简便的参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators

如果值超过三个,则创建用于数组的函数可能更方便:

function allEqual(arr) {
    return arr.every(function (x, i) {
        return i === 0 || x === arr[i - 1];
    });
}
allEqual([1, 1, 1])

ES6:

function allEqual(...arr) {
    return arr.every((x, i) => i === 0 || x === arr[i - 1]);
}
allEqual(1, 1, 1)

作为@vp_arth答案的补充,您甚至可以向 Array 原型添加一个方法

Array.prototype.isHomogeneous = function(){
    return Array.prototype.every.call(this, function(c,i,a){ return c === a[0];})
}

所以你可以做到

[1,2,3].isHomogeneous() = 假

[1,1,1].isHomogeneous() = 真