const cond = false const extraInfo = [ { a: 11, b: 25 }, { a: 12, b: 34 }, { a: 1, c: 99 } ] const userInfo = [ { z: 8 }, { z: 10 }, ...(cond && extraInfo) ]
When cond
is true, I want both extra and user info.
When cond
is false, only userInfo is needed.
The issue is when cond
is false, I get
TypeError: (intermediate value)(intermediate value)(intermediate value)[Symbol.iterator] is not a function
My understanding is that I am not allowed to use a boolean as a spread element, in this case ...false
.
But ...( cond ? extraInfo : {} )
doesn't seem to work either.
What is going on?
Spreading into an Array We need an empty array at end because we cannot spread undefined or null into an array (they are not iterables). Spreading an empty array into another just keeps the array intact.
The spread operator allows you to spread out elements of an iterable object such as an array, map, or set. For example: const odd = [1,3,5]; const combined = [2,4,6, ...odd]; console.log(combined); Code language: JavaScript (javascript)
Spread syntax can be used when all elements from an object or array need to be included in a new array or object, or should be applied one-by-one in a function call's arguments list.
Just make it
...(cond ? extraInfo : [])
Demo with true
var cond = true; var extraInfo = [ { a: 11, b: 25 }, { a: 12, b: 34 }, { a: 1, c: 99 } ]; var userInfo = [ { z: 8 }, { z: 10 }, ...(cond ? extraInfo : []) ]; console.log( userInfo );
Demo with false
var cond = false; var extraInfo = [ { a: 11, b: 25 }, { a: 12, b: 34 }, { a: 1, c: 99 } ]; var userInfo = [ { z: 8 }, { z: 10 }, ...(cond ? extraInfo : []) ]; console.log( userInfo );
Conditionally spread an entity to Object
console.log( { name: 'Alex', age: 19, ...(true && { city: 'Kyiv' }), ...(false && { country: 'Ukraine' }) } ) // { name: 'Alex', age: 19, city: 'Kyiv' }
Conditionally spread an entity to Array
console.log( [ 'Dan', 'Alex', ...(true ? ['Robin'] : []) ] ) // [ 'Dan', 'Alex', 'Robin' ]
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