it-swarm.com.de

Woher wissen, ob alle JavaScript-Objektwerte wahr sind?

In JavaScript muss ich wissen, ob alle Objektelemente auf true gesetzt sind.

Wenn ich folgendes Objekt habe:

var myObj = {title:true, name:true, email:false};

Ich könnte so etwas schreiben:

 if(myObj.title && myObj.name && myObj.email){
 /*Some code */
};

Aber ich suche nach dem einfachsten Weg, es zu schreiben. z.B :

if(myObj all is true){
/*Some code */
};

Ich habe vielleicht ein anderes Objekt mit 10-20 Gegenständen und muss wissen, ob alle wahr sind.

35
napalias

Wie wäre es mit so etwas wie:

    function allTrue(obj)
    {
      for(var o in obj)
          if(!obj[o]) return false;
        
      return true;
    }
    
    var myObj1 = {title:true, name:true, email:false};
    var myObj2 = {title:true, name:true, email:true};

    document.write('<br />myObj1 all true: ' + allTrue(myObj1));
    document.write('<br />myObj2 all true: ' + allTrue(myObj2));

    

Einige Haftungsausschlüsse: Dies gibt true zurück, wenn alle Werte true-ish sind und nicht unbedingt genau dem booleschen Wert von True entsprechen. Außerdem werden die all Eigenschaften des übergebenen Objekts einschließlich seines Prototyps überprüft. Dies ist möglicherweise nicht das, was Sie benötigen. Es sollte jedoch für ein einfaches Objektliteral wie das von Ihnen bereitgestellte problemlos funktionieren.

26

In modernen Browsern:

var allTrue = Object.keys(myObj).every(function(k){ return myObj[k] });

Eine kürzere Alternative dazu ist:

var allTrue = myObj.every(function(i) { return i; });

Wenn Sie wirklich auf true prüfen möchten, anstatt nur auf einen wahren Wert:

var allTrue = Object.keys(myObj).every(function(k){ return myObj[k] === true });
38
elclanrs

Mit ES2017 Object.values ​​() ist das Leben noch einfacher.

Object.values(yourTestObject).every(item => item)

Noch kürzere Version mit Boolean () Funktion [dank xab]

Object.values(yourTestObject).every(Boolean)

Oder mit strengeren wahren Prüfungen

Object.values(yourTestObject)
    .every(item => item === true)
26
Nachiketha

Der schnellste Weg ist eine Schleife

for(var index in myObj){
  if(!myObj[index]){ //check if it is truly false
    var fail = true
  }
}
if(fail){
  //test failed
}

Dadurch werden alle Werte im Array geloopt, und es wird geprüft, ob der Wert falsch ist. Wenn dies der Fall ist, wird die Fehlervariable gesetzt, die Ihnen mitteilt, dass der Test fehlgeschlagen ist.

1
Jordan Ramstad