Eigenschaften werden diesem Objekt dynamisch hinzugefügt. Gibt es eine Möglichkeit für mich, einfach durchzuschleifen und zu überprüfen, ob eine Eigenschaft vorhanden ist? Wenn das so ist, wie?
Beachten Sie, dass forOwn Schecks hasOwnPropertywie Sie es normalerweise tun müssen, wenn Sie die Eigenschaften eines Objekts durchlaufen. forIn führt diese Prüfung nicht durch.
sehr wichtig, das zu beachten key ist der zweite Parameter, aber es macht Sinn
– Phil
7. März 2016 um 14:55 Uhr
stebb
Ja, das können Sie und Lodash wird nicht benötigt … dh
for (var key in myObject.options) {
// check also if property is not inherited from prototype
if (myObject.options.hasOwnProperty(key)) {
var value = myObject.options[key];
}
}
Bearbeiten: die akzeptierte Antwort (_.forOwn()) sollte https://stackoverflow.com/a/21311045/528262 lauten
+ Ich weiß, dass sie Lodash-Funktionsstil wollen, meine war nur eine Möglichkeit, dem OP zu zeigen, dass Sie ein Objekt ohne Abhängigkeit von einer Bibliothek loopen können (falls er nur diese Funktionalität ohne Lodash haben möchte).
– stebb
23. Januar 2014 um 14:36 Uhr
In diesem Fall wäre es schön gewesen, beide Antworten bereitzustellen.
– flq
31. Juli 2015 um 20:16 Uhr
verwenden lodash und nicht dies ist nur dadurch gerechtfertigt, dass das lästige nicht benötigt wird hasOwnProperty überprüfen
– Mugen
9. November 2019 um 16:37 Uhr
Für Ihren erklärten Wunsch, “zu prüfen, ob eine Eigenschaft existiert”, können Sie direkt Lo-Dash’s verwenden has.
var exists = _.has(myObject, propertyNameToCheck);
Sie können dies definitiv mit Vanilla JS tun, wie stecb gezeigt hat, aber ich denke each ist die beste Antwort auf die Kernfrage, wie man es mit Lodash macht.
Wie JohnnyHK erwähnt, gibt es auch die has Methode, die für den Anwendungsfall hilfreich wäre, aber von dem, was ursprünglich angegeben wurde set kann nützlicher sein. Nehmen wir an, Sie wollten diesem Objekt dynamisch etwas hinzufügen, wie Sie erwähnt haben:
let dynamicKey = 'someCrazyProperty';
let dynamicValue="someCrazyValue";
_.set( myObject.options, dynamicKey, dynamicValue );
So würde ich es machen, basierend auf der ursprünglichen Beschreibung.
Nehmen wir das folgende Objekt als Beispiel
let obj = { property1: 'value 1', property2: 'value 2'};
Holen Sie zuerst alle Schlüssel im obj
let keys = Object.keys(obj) //it will return array of keys
und dann durchschleifen
keys.forEach(key => //your way)
einfach alles zusammenbauen
Object.keys(obj).forEach(key=>{/*code here*/})
evianpring
In ES6 ist es auch möglich, die Werte eines Objekts mithilfe von zu durchlaufen for..of Schleife. Für JavaScript-Objekte funktioniert dies jedoch nicht sofort, da Sie eine @@iterator-Eigenschaft für das Objekt definieren müssen. Dies funktioniert wie folgt:
Das for..of -Schleife fragt das “Objekt, über das iteriert werden soll” (nennen wir es obj1 für ein Iterator-Objekt). Die Schleife iteriert über obj1, indem sie nacheinander die Methode next() für das bereitgestellte Iterator-Objekt aufruft und den zurückgegebenen Wert als Wert für jede Iteration von verwendet die Schleife.
Das Iterator-Objekt wird durch Aufrufen der in der Eigenschaft @@iterator oder Symbol.iterator von obj1 definierten Funktion abgerufen. Dies ist die Funktion, die Sie selbst definieren müssen, und sie sollte ein Iteratorobjekt zurückgeben
for (val of obj1) {
console.log(val);
} // 5 hello
Barry G
Es wäre hilfreich zu verstehen, warum Sie dies mit Lodash tun müssen. Wenn Sie nur überprüfen möchten, ob ein Schlüssel in einem Objekt vorhanden ist, benötigen Sie lodash nicht.
myObject.options.hasOwnProperty('property');
Wenn Sie nachsehen möchten, ob ein Wert vorhanden ist, können Sie verwenden _.invert
_.invert(myObject.options)[value]
12701200cookie-checkDurchlaufen Sie die Eigenschaften im JavaScript-Objekt mit Lodashyes