Proposal: Object.path([ ... ], defaultValue)

# Vikash Agrawal (10 months ago)

Hello Everyone,

It is a lot of times that we see x is not a property of undefined and to solve this we have to resort to &&, something like -> data &&

data.childData && data.childData.innerDataArray && data.childData.innerDataArray.length

0 whiich is quiet verbose.

I suggest, we should add a utility method like Object.path, which takes an array of strings and returns the value from a given nested object. Also, this can take a second argument which will be a default value if not found.

This is inspired by path and pathOr as implemented in


# Sebastian Malton (10 months ago)

An HTML attachment was scrubbed... URL: esdiscuss/attachments/20180215/302a6ad6/attachment-0001

# Vikash Agrawal (10 months ago)

Sure Sebastian.

# Andrea Giammarchi (10 months ago)

?. does not compose though, and a standard way to retrieve a path is needed in JSON Pointer too [1]

I've personally used similar approach in various cases, and old libraries like Ext.JS used to Function("this." + path.join('.')).call(target) to retrieve a path in a speedy way.

Beside the "array of string" bit, which is limited if we think nested Arrays and/or Symbols as properties, I think a standard way to retrieve a path would be beneficial in various cases.

Just my 2 cents.


# Jordan Harband (10 months ago)

Seems like it composes fine (using ??./??[ syntax): `function retrieve(obj, path) { return path.split('.').reduce((prev, key) =>

prev??[key], obj); } retrieve(someObject, 'a.b.c.d')`

# Naveen Chawla (10 months ago)

Of course you can compose paths with it (and even without it), but it doesn't compose on it's own like a standard path syntax could.