wie man überprüft, ob alle Objektschlüssel falsche Werte haben

Lesezeit: 4 Minuten

JS-Objekt:

var saver = {
        title: false,
        preview: false,
        body: false,
        bottom: false,
        locale: false
};

Die Frage ist, wie man überprüft, ob alle Werte vorhanden sind FALSCH?

Ich kann die jQuery-Funktion $.each() und eine Flag-Variable verwenden, aber es gibt vielleicht eine bessere Lösung?

  • was meinen Sie ohne durch die Eigenschaften iterieren?

    Benutzer2587132

    12. Mai 2014 um 9:00 Uhr

  • Ja. Ich möchte eine elegantere Lösung finden.

    – Andrej Krjukow

    12. Mai 2014 um 9:04 Uhr

  • Eine elegantere Lösung unten hinzugefügt. Du kannst es schaffen ohne Wiederholungnur mit jQuery.

    – Weg Codierung

    27. Juni 2014 um 10:27 Uhr

Benutzer-Avatar
MattCochrane

Aktualisierte Version. Danke @BOB für den Hinweis, dass Sie verwenden können values direkt:

Object.values(obj).every((v) => v === false)

Auch die Frage zum Vergleich gestellt false und die meisten Antworten unten kehren zurück true wenn die Objektwerte sind falsch (z.B. 0, undefined, null, false), nicht nur, wenn sie strikt falsch sind.


Dies ist eine sehr einfache Lösung, die JavaScript 1.8.5 erfordert.

Object.keys(obj).every((k) => !obj[k])

Beispiele:

obj = {'a': true, 'b': true}
Object.keys(obj).every((k) => !obj[k]) // returns false

obj = {'a': false, 'b': true}
Object.keys(obj).every((k) => !obj[k]) // returns false

obj = {'a': false, 'b': false}
Object.keys(obj).every((k) => !obj[k]) // returns true

Alternativ könntest du auch schreiben

Object.keys(obj).every((k) => obj[k] == false)
Object.keys(obj).every((k) => obj[k] === false)  // or this
Object.keys(obj).every((k) => obj[k])  // or this to return true if all values are true

Siehe die Mozilla Developer Network Object.keys()-Referenz Für weitere Informationen.

  • Object.values(obj).every((value) => value === false) sollte auch funktionieren.

    – Bob

    19. Juni 2020 um 19:54 Uhr

Benutzer-Avatar
Setzen Sie Monica Cellio wieder ein

Das wird den Trick machen …

var result = true;

for (var i in saver) {
    if (saver[i] === true) {
        result = false;
        break;
    }
}

Sie können Objekte mit einer Schleife iterieren, entweder per Index oder Schlüssel (wie oben).

Wenn Sie aufgeräumten Code suchen und das nicht wiederholen möchten, fügen Sie ihn einfach in eine Funktion ein …

Object.prototype.allFalse = function() { 
    for (var i in this) {
        if (this[i] === true) return false;
    }
    return true;
}

Dann kannst du es anrufen, wann immer du es brauchst, so…

alert(saver.allFalse());

Hier ist ein funktionierendes Beispiel …

Object.prototype.allFalse = function() { 
    for (var i in this) {
        if (this[i] === true) return false;
    }
    return true;
}

var saver = {
        title: false,
        preview: false,
        body: false,
        bottom: false,
        locale: false
};

console.log("all are false - should alert 'true'");
console.log(saver.allFalse());

saver.body = true;

console.log("one is now true - should alert 'false'");
console.log(saver.allFalse());

  • Danke. Aber diese Methode ist ähnlich wie meine $.each() Methode. Meine Frage ist, wie man Iterationen vermeidet?

    – Andrej Krjukow

    12. Mai 2014 um 8:58 Uhr

  • Sie können Iterationen nicht vermeiden. Wenn es eine native Möglichkeit gäbe, das zu tun, was Sie fragen, würde dies eine Iteration im Hintergrund beinhalten. Ich denke, das Beste, worauf Sie hoffen können, ist eine kleine oder ordentliche Iteration.

    – Wiedereinsetzung von Monica Cellio

    12. Mai 2014 um 8:59 Uhr


  • Du kannst nicht. Und eine Iteration ist viel effizienter, denn wenn Sie die Eigenschaften des Objekts ändern, müssten Sie den Code ändern, der sie überprüft.

    – Rory McCrossan

    12. Mai 2014 um 8:59 Uhr

  • Ich habe es nur leicht geändert, um dem spezifischen “alle Eigenschaften falsch” zu entsprechen, anstatt dem Ansatz “gibt es ein wahres”, den ich ursprünglich gewählt habe.

    – Wiedereinsetzung von Monica Cellio

    12. Mai 2014 um 9:15 Uhr

  • Es wird normalerweise nicht empfohlen, globale Prototypen zu ändern.

    – Gläubiger

    23. Dezember 2021 um 2:36 Uhr

Benutzer-Avatar
andersh

In einem Kommentar fragen Sie, ob Sie Iterationen vermeiden können. Sie können, wenn Sie eine Javascript-Bibliothek verwenden, die einen funktionalen Ansatz unterstützt, wie z Unterstreichen, Lodash oder Zucker.

Mit Underscore und Lodash können Sie so etwas schreiben:

var result = _.every(_.values(saver), function(v) {return !v;});

Bei Sugar schreibt man einfach:

var result = Object.all(saver,false);

  • Sie können dies auch einfach in Lodash tun: var result = _.every(_.valuesIn(saver), Boolean));

    – Ashraf Slamang

    4. Oktober 2017 um 9:07 Uhr


  • Lodash: const result = _.some(saver);

    – ngstschr

    7. März 2019 um 13:47 Uhr

Verwenden Sie array.some()

Es ist sauberer und verständlicher! Und es kann uns Laufzeit sparen, denn sobald die Funktionsbedingung einmal existiert, verlässt sie die Schleife und gibt wahr zurück.

Object.values(obj).some(val => val)

Wenn Sie tatsächlich eine strikte Gleichheit zu False benötigen, schreiben Sie Folgendes:

Object.values(obj).some(val => val !== false)

Object.values(obj) Erstellen Sie ein Array mit den Werten der einzelnen Schlüssel.

Kurzer und praktischer Einzeiler, vollständig von Browsern unterstützt:

Object.keys(saver).every(k => saver[k] === false);

oder

Object.values(saver).every(v => v === false);

(Achtung, Objekt.Werte() wird nicht unterstützt von IE noch.)

Benutzer-Avatar
Hiob Gathu

Dies sollte auf allen gängigen Browsern funktionieren:

Object.keys(saver).every(key => saver[key] === false); // return true

Benutzer-Avatar
Rajaprabhu Aravindasamy

Mach es so,

 for (var i in saver) {
  if (saver[i]) {
    return false; // here if any value is true it wll return as false /
  }
 }
 return true; //here if all value is false it wll return as true

1204710cookie-checkwie man überprüft, ob alle Objektschlüssel falsche Werte haben

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy