Durchlaufen Sie die Eigenschaften im JavaScript-Objekt mit Lodash

Lesezeit: 3 Minuten

Benutzer-Avatar
Benutzer3111277

Ist es möglich, die Eigenschaften in einem JavaScript-Objekt zu durchlaufen? Zum Beispiel habe ich ein JavaScript-Objekt wie folgt definiert:

myObject.options = {
  property1: 'value 1',
  property2: 'value 2'
};

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?

Benutzer-Avatar
Djechlin

Verwenden _.forOwn().

_.forOwn(obj, function(value, key) { } );

https://lodash.com/docs#forOwn

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

Benutzer-Avatar
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.

_.each( myObject.options, ( val, key ) => { 
    console.log( key, val ); 
} );

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*/})

Benutzer-Avatar
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

Hier ist ein Beispiel:

const obj1 = {
  a: 5,
  b: "hello",
  [Symbol.iterator]: function() {
    const thisObj = this;
    let index = 0;
    return {
      next() {
        let keys = Object.keys(thisObj);
        return {
          value: thisObj[keys[index++]],
          done: (index > keys.length)
        };
      }
    };
  }
};

Jetzt können wir die verwenden for..of Schleife:

for (val of obj1) {
  console.log(val);
}    // 5 hello

Benutzer-Avatar
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]

1270120cookie-checkDurchlaufen Sie die Eigenschaften im JavaScript-Objekt mit Lodash

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

Privacy policy