Iven Iven - 6 months ago 11
Javascript Question

Computed destructuring of nested Objects

It's convenient to extract properties from

Object
s by destructuring:

let o = {id: "100", name: "Jane Doe", address: {id:1, city:"Fargo"}},
key = "address";

let {address: {id: id}} = o; // 1


Destructuring patterns can be computed as well:

let {[key]: {city: city}} = o; // Fargo


But it seems apparently not possible to extract properties of nested objects dynamically:

key = "address.city";
({[key]: city} = o); // undefined


Is it possible to destructure nested
Object
s with computed patterns?

Answer

No, this is not possible. Destructuring is only for objects whose structure you know about. You could of course do

var keys = ["address", "city"];
var {[keys[0]]: {[keys[1]]: city}} = o;

but not for arbitrarily nested objects. You'll have to use a recursive function for that which walks the property path. See the question Convert JavaScript string in dot notation into an object reference and many others for that.

Comments