Javascript сравнить 3 значения

У меня есть 3 значения, которые я хочу сравнить f, g и h. У меня есть код, чтобы проверить, что все они равны друг другу и что ни один из них не равен нулю. Я смотрел онлайн, но не мог найти ничего похожего на мой запрос. В настоящее время я проверяю код следующим образом...

if(g == h && g == f && f == h && g != null && f != null && h != null)
{
//do something
}

Это довольно длинная ветка, и я могу добавить больше значений, поэтому мне просто интересно узнать, есть ли более быстрый способ проверить, что ни одно из значений не является нулевым, а все значения равны друг другу?

Заранее благодарим за помощь.

Ответ 1

Вы можете сократить это до

if(g === h && g === f && g !== null)
{
//do something
}

Фактический способ сравнения нескольких значений (независимо от их количества)
(вдохновленный/упрощенный @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;
}

и назовите это с помощью

if( areEqual(a,b,c,d,e,f,g,h) )
{
//do something
}

Ответ 2

Работает для любого количества элементов.

ES5

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

ES2015

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

Ответ 3

Я предлагаю вам написать функцию, в которой вы даете массив со всеми значениями, которые вы хотите сравнить, а затем итерации по массиву для сравнения значений, которые друг с другом:

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;
}

должно быть, я думаю:)

Ответ 4

Напишите простую функцию:

var checkAllArguments = function() {
    var len = arguments.length;
    var obj;

    if(len == 0) {
        return true;
    } else {
        if(arguments[0] == null) {
            return false;
        } else {
            obj = arguments[0];
        }
    }

    for(var i=1; i<len; i++) {
        if(arguments[i] == null) {
            return false;
        }

        if(obj == arguments[i]) {
            continue;
        } else {
            return false;
        }
    }

    return true;
}

Теперь, чтобы проверить несколько аргументов, все, что вам нужно сделать, это:

if(checkAllArguments(g, h, f)) {
   // Do something
}

Ответ 5

Добавьте функцию distinct в Array.prototype:

Array.prototype.distinct = function() {
    var result = [];
    for(var i = 0; i < this.length; i++) {
        if (result.indexOf(this[i]) == -1) {
            result.push(this[i]);
        }
    }
    return result; 
}

Тогда do:

var myArray = [f, g, h];
if (myArray.indexOf(null) == -1 && myArray.unique().length == 1)
{
    // no nulls and all elements have the same value!
}

Ответ 6

Создайте массив строк и проверьте наличие следующего значения там

compareAnswers(a1: string, a2: string, a3: string): boolean {
   this.compareAnswerArr.push(a1);
if (this.compareAnswerArr.includes(a2) == false) {
  this.compareAnswerArr.push(a2);
  if (this.compareAnswerArr.includes(a3) == false) {
    return true;
  } else return false;
}
else return false;}