Hallo dedlfix,
Was mir beim Nachdenken auch noch aufgefallen ist, du machst mit der Funktion nichts anderes als in meinem Beispiel, nur umständlicher.
Nein, nur allgemeiner. Damit beliebige Tiefen möglich werden.
Die obige Prüfung ist gängige Praxis
Helper, die Zugriffspfade in Objekten prüfen sind auch gängige Praxis 😉
Ich seh da jetzt noch nicht den Sinn in dieser Hilfsfunktion.
Sie ersparen Boilerplate und sichern ab, dass man die Prüfung, ob der Pfad vollständig zugreifbar ist, nicht vergisst. Statt if(foo && foo.bar && foo.bar[0] && foo.bar[0].baz)
reicht ein if(getPath(foo, 'bar.0.baz'))
, oder sogar ein getPath(foo, 'bar.0.baz', '(unbekannt)')
.
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.
Je mehr ich mit APIs spreche, desto mehr zeigt sich, dass diese Funktion (und ihr Counterpart putPath()
) einfach praktisch ist. Weniger Boilerplate gleich mehr gut.
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.
Naja, dann macht man das mit getPath
auch:
const part = getPath(foo, "bar.0", {});
if(part.a && part.b) {
// ...
}
LG,
CK