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
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] == 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
Object.values(obj).every((value) => value === false) sollte auch funktionieren.
– Bob
19. Juni 2020 um 19:54 Uhr
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
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:
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
12047100cookie-checkwie man überprüft, ob alle Objektschlüssel falsche Werte habenyes
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