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