2012-04-02 29 views
9

Ho 3 valori che voglio confrontare f, ge h. Ho del codice per verificare che tutti siano uguali tra loro e che nessuno di essi sia nullo. Ho dato un'occhiata online ma non ho trovato nulla che sembrasse rispondere alla mia domanda. Attualmente sto controllando il codice in questo modo ...Javascript confronta 3 valori

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

Questo è abbastanza lungo senza fiato e potrei l'aggiunta di più valori, quindi mi stavo chiedendo se c'è un modo più rapido per controllare che nessuno dei i valori sono nulli e tutti i valori sono uguali tra loro?

Grazie in anticipo per qualsiasi aiuto.

+0

andrà bene mettendo questi valori in un array? –

+0

Non è necessario controllare tutte le variabili se sono '! = Null' .. Se sono uguali tra di loro, è possibile selezionare solo uno contro' null'. Lo stesso con il controllo di 'f == h' .. se entrambi' f' e 'h' sono uguali a' g' non devi controllarli .. –

+0

hai confrontato gli svantaggi di mettere tutte le var in un array? – cctan

risposta

27

Si potrebbe accorciare che a

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

Per un modo reale di confrontare più valori (indipendentemente dal loro numero)
(ispirato da/semplificato @Rohan Prabhu risposta)

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

e chiamare questo con

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

Si può anche omettere il '! = Null' – m90

+0

@ m90, perché? cosa succede se tutti sono nulli? –

+0

@ m90 comprare cosa succede se tutti sono nulli? allora valuterà a 'true'. – David

4

scrivere una semplice funzione:

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

Ora, per controllare più argomenti, tutto ciò che dovete fare è:

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

vi consiglio di scrivere una funzione in cui si dà un array con tutti i valori che si desidera confrontare e quindi scorrere l'array per confrontare i valori tra loro:

che dovrebbe essere, penso :)

+0

tuo soln. è molto più complesso di quanto dovrebbe essere. –

4

Funziona per qualsiasi numero di elementi.

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

Aggiungi un distinct funzione per 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; 
} 

Poi fare:

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