Javascript比较3个值

Phi*_*hil 21 javascript

我有3个值,我想比较f,g和h.我有一些代码来检查它们是否彼此相等,并且它们都不为空.我在网上看过,但找不到任何似乎可以回答我查询的内容.目前我正在以下列方式检查代码......

if(g == h && g == f && f == h && g != null && f != null && h != null)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)

这是漫长的啰嗦,我可能会添加更多的值,所以我只是想知道是否有更快的方法来检查没有值是否为空并且所有值彼此相等?

在此先感谢您的帮助.

Gab*_*oli 42

你可以缩短它

if(g === h && g === f && g !== null)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)

对于比较多个值(无论其数量)的实际方法
(灵感来自/简化@Rohan Prabhu答案)

function areEqual(){
   var len = arguments.length;
   for (var i = 1; i< len; i++){
      if (arguments[i] === null || arguments[i] !== arguments[i-1])
         return false;
   }
   return true;
}
Run Code Online (Sandbox Code Playgroud)

并称之为

if( areEqual(a,b,c,d,e,f,g,h) )
{
//do something
}
Run Code Online (Sandbox Code Playgroud)

  • @ m90是的,但这也适用于所有虚假值,OP专门针对"null"http://jsfiddle.net/SFDRK/1/ (2认同)

JMM*_*JMM 11

适用于任意数量的物品.

ES5

if ([f, g, h].every(function (v, i, a) {
  return (
    v === a[0] &&
    v !== null
  );
})) {
  // Do something
}
Run Code Online (Sandbox Code Playgroud)

ES2015

if ([f, g, h].every((v, i, a) => 
  v === a[0] &&
  v !== null
)) {
  // Do something
}
Run Code Online (Sandbox Code Playgroud)


Oll*_*etz 11

关于什么

(new Set([a,b,c])).size === 1
Run Code Online (Sandbox Code Playgroud)

  • 这绝对是一个我从未考虑过的非常优雅的解决方案。我想知道它是否有任何缺点。 (5认同)
  • 很好的解决方案!请记住,@Phil,1(数字)和“1”(字符串)将被视为不同的值 (2认同)

Dan*_*ele 5

我建议您编写一个函数,在其中给您一个要比较的所有值的数组,然后遍历该数组以相互比较这些值:

function compareAllValues(a) {
     for (var i = 0; i < a.length; i++) {
         if (a[i] === null) { return false }
         for (var j = 0; j < i; j++) {
            if (a[j] !== a[i]) { return false }
         }
     }

     return true;
}
Run Code Online (Sandbox Code Playgroud)

我认为应该就是这样:)