@Scott My mistake empty string [...""] is spreadable. But not sure if it is desirable behavior.
On Fri, 23 Aug 2019, 04:42 Beknar Askarov, <[email protected]> wrote: > Indeed. I see your point. > > But it really needs to be falsy check. > Since falsy values are not "spreadable" > > > > On Fri, 23 Aug 2019, 03:52 Scott Rudiger, <[email protected]> wrote: > >> I like it; code seems cleaner to me with its use. However, since the >> syntax is so similar to optional chaining, it's too bad your goal with this >> sample is to check for falsey values rather than nullish values. >> >> [ 1, ?...(condition && [2, 3]), // no extras:) 3, ] >> >> On Thu, Aug 22, 2019, 6:01 PM Beknar Askarov <[email protected]> >> wrote: >> >>> Problem >>> >>> Spreading is great! It contributes towards "declerativity" of the >>> language and reduces verbosity. I see one more feature to add to improve it. >>> >>> Consider following >>> >>> [ >>> 1, >>> condition && 2, >>> condition && 3, >>> 4, >>> ].filter(Boolean) // filtering needed to remove falsy values >>> // Results in >>> [1, 2, 3, 4] // if condition is `truthy`// and >>> [1, 4] // if not truthy. >>> >>> Another way to achieve the same result without the need of filtering >>> after >>> >>> [ >>> 1, >>> ...(condition ? [2, 3] : []), // note extra [] in the end, to avoid >>> errors >>> 4, >>> ] >>> >>> Similar pattern with objects >>> >>> { >>> ...(condition ? { foo: 'bar' } : {}), // extra {} >>> } >>> >>> Another pattern is when condition is the object itself, when it is >>> known that type is one or falsy >>> >>> [ >>> item1, >>> item2, >>> ...(itemsOrNull || []) // extra [] >>> ] >>> >>> Similar for objects >>> >>> { >>> ...(obj || {}), // extra {} >>> } >>> >>> I see these patterns appearing very often. And these are cleanest >>> examples I have seen so far. >>> ProposalOptional spreadingWith condition >>> >>> // Arrays >>> [ >>> 1, >>> ?...(condition && [2, 3]), // no extras:) >>> 3, >>> ]// Objects >>> { >>> ?...(condition && { foo: 'bar' }) // no extras:) >>> } >>> >>> When condition is the object >>> >>> [ >>> item1, >>> item2, >>> ?...itemsOrNull // no extras at all:) even (...) >>> ] >>> >>> These look nicer and can be good for performance since (?...), since no >>> cleanup is needed after to remove falsy values or extra spreading even when >>> it is not needed. >>> >>> Looks intuitive (since: >>> https://github.com/tc39/proposal-optional-chaining) >>> Plays nice with typeings. >>> >>> What do you think? https://es.discourse.group/t/optional-spreading/93 >>> _______________________________________________ >>> es-discuss mailing list >>> [email protected] >>> https://mail.mozilla.org/listinfo/es-discuss >>> >>
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

