In ES6 we can do:
let myFunc = ({name}) => {
console.log(name)
}
myFunc({name:'fred'}) // => logs 'fred'
But how do I do it for nested properties like this:
myFunc({event:{target:{name:'fred'}}}) // => I want it to log 'fred'
What should myFunc look like so that it logs 'fred'?
I cannot change the object passed in. I wish to use destructuring to achieve this or some other suitable ES6 approach.
Gotchas of Nested DestructuringOne thing we cannot do with nested destructuring is to destructure a null or undefined value. If we attempt to do so it will throw an error: So, if we want to use nested destructuring we must be certain that the nested structure exists, or intentionally catch the thrown error.
It's common for objects to contain nested objects and arrays. Destructuring allows us to extract properties that are nested in objects using the syntax that we learned above for destructuring arrays and objects.
To destructure an array in JavaScript, we use the square brackets [] to store the variable name which will be assigned to the name of the array storing the element.
You can simply do like this:
const myFunc = ({event: {target: {name}}}) => {
console.log(name)
}
myFunc({event: {target: {name: 'fred'}}})
.as-console-wrapper { max-height: 100% !important; top: 0; }
Here is an other implementation, with both in parameters, but the second is entirely optionnal:
const myFunc = (
{name: name},
{event: {target: {name: eventTargetName = ''} = ''} = ''} = ''
) => {
console.log(name, eventTargetName)
}
myFunc({name:'fred'})
myFunc({name:'papi'}, {event: {target: {name: 'fredo'}}})
.as-console-wrapper { max-height: 100% !important; top: 0; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With