dedlfix: Objekt in Array so zulässig?

Beitrag lesen

Tach!

if (foo && foo.bar && foo.bar.qux)

Für sowas würde ich immer einen Helper schreiben, der mir den ganzen Boilerplate abnimmt, z.B. sowas:

function getPath(obj, key, dfault = undefined) {
  const path = key.split(/\./);
  let i = 0;

  while (obj && i < path.length) {
    obj = obj[path[i++]];
  }

  return obj === undefined ? dfault : obj;
}

console.log(getPath({}, "a.0.c"));
console.log(getPath({ a: [{ c: 'd' }]}, "a.0.c"));
console.log(getPath({}, "a.0.c", 'd'));

Was mir beim Nachdenken auch noch aufgefallen ist, du machst mit der Funktion nichts anderes als in meinem Beispiel, nur umständlicher. Die obige Prüfung ist gängige Praxis und kommt ohne eine Hilfsfunktion aus, die man erst verstehen muss. Die Zwischenteile des Pfades prüfst du ebenfalls nur falsy - was ja auch völlig ausreichend ist. Lediglich den letzten Teil prüfst du auf exakt undefined, wobei auch hier keine Rolle spielt, ob die Eigenschaft gar nicht oder mit dem Wert undefined vorhanden ist. Ich seh da jetzt noch nicht den Sinn in dieser Hilfsfunktion.

Es wird ein wenig besser je länger der Pfad zur Eigenschaft wird. Aber dann würde ich auch eher versuchen, den Code besser aufzuteilen, so dass sich nicht die Notwendigkeit einer solchen Rattenschwanzprüfung ergibt. Vermutlich gibt es auch noch weiter vorn im Pfad etwas zu prüfen, so dass bei der Gelegenheit gleich eine Variable mit Referenz auf das Restobjekt angelegt werden kann. Dann hat man bei dessen Prüfung weniger Glieder zu durchlaufen.

dedlfix.

0 47

Objekt in Array so zulässig?

Silke Seide
  • javascript
  1. 0
    pl
    1. 0
      Silke Seide
  2. 0
    dedlfix
    1. 0
      ursus contionabundo
      1. 0
        dedlfix
        1. 0
          pl
          1. 0
            dedlfix
            1. 0
              pl
              1. 5
                Orlok
                • javascript
                • programmiertechnik
                1. 0
                  ursus contionabundo
                  1. 0
                    pl
                    1. 0
                      beatovich
                      1. 0
                        pl
                  2. 0
                    mark
                  3. 0
                    dedlfix
                    1. 0
                      Christian Kruse
                      1. 0
                        dedlfix
                        1. 0
                          Christian Kruse
                          1. 0
                            dedlfix
                            1. 0
                              Christian Kruse
                              1. 0
                                dedlfix
                                1. 0
                                  Christian Kruse
                                  1. 0
                                    1unitedpower
                                    1. 0
                                      1unitedpower
                                2. 2
                                  Rolf B
                                  1. 0
                                    Christian Kruse
                                  2. 0
                                    dedlfix
                                    1. 0
                                      Christian Kruse
                                      1. 0
                                        dedlfix
                                        1. 0
                                          Christian Kruse
                                    2. 0
                                      Rolf B
                              2. 0
                                dedlfix
                                1. 0
                                  Christian Kruse
                      2. 3
                        Christian Kruse
                        1. 0
                          dedlfix
                          1. -1
                            pl
                          2. 0
                            ursus contionabundo
                            1. 1
                              dedlfix
                        2. 0
                          Rolf B
                  4. 0
                    1unitedpower
                2. 0
                  1unitedpower
        2. 0
          ursus contionabundo
          1. 0
            pl
            1. 0

              Alter Perl-Pseudohash in modernem JS ...

              ursus contionabundo
              • javascript
              • meinung
              1. 0
                pl
    2. 0
      Silke Seide