Question ... perhaps a proposal: extract from object to object

James Treworgy jamietre at gmail.com
Fri Mar 17 12:36:04 UTC 2017


I think a good solution that doesn't require new syntax would be map/filter
methods on the Object prototype that return a new object, e.g.

let subset = { a:1, b:2, c:3 }.filter(([key])=>['b'].includes(key))
// subset = { b: 2 }

let subset = { 1:1, b:2, c:3 }.map(([key, value])=>[key, value * 2])
// subset = { a:2, b:4. c:6 }

Actually I'd like this to be available on Map too. I've always thought it
was interesting that the Map and Set objects do not natively include
map/filter operations -- or maybe even most of the Array prototype methods
as applicable. And for Sets, basic set operations like
except/distinct/union.

But a Javascript object is just a Map, really, or I guess one could say
that a Map is just an object with a few enhancements. It's surprising that
there is no native operation built in to directly convert between Maps and
objects given their conceptual similarity. In either case though it would
be nice to be able to apply standard processing rules that one applies to
Maps conceptually to an Object (and a Map) natively, like filter and map.



On Fri, Mar 17, 2017 at 8:04 AM, Felipe Nascimento de Moura <
felipenmoura at gmail.com> wrote:

> Hi.
> Interesting to know that it has already been discussed.
>
> I know we could create a function to do similar things, but I think the
> language itself has evolved so well, this is a use case it could fit
> somehow.
>
> I think there could be different approaches for that, like
>
> Object.pick([ 'a', 'c' ], { a: 1, b: 2, c: 3 })
>
> or
>
> let x = {a, c}{ a: 1, b: 2, c: 3 }
>
> or
>
> let {a, c} as x = { a: 1, b: 2, c: 3 }
>
> or
>
>
> let x = { a: 1, b: 2, c: 3 }{a, c}
>
> or
>
> let x = { a: 1, b: 2, c: 3 }['a', 'c']
>
> Would you consider any of those as an interesting option?
>
> thanks.
>
>
>
> On Fri, Mar 17, 2017 at 7:25 AM, peter miller <fuchsia.groan at virgin.net>
> wrote:
>
>> Hi,
>>
>> There seems to be little appetite for taking it up, in spite of it being
>>> (IMHO) a very common use case.
>>>
>>
>> I'll second it being common in my code. My personal highlights would be
>> assigning to this:
>>
>> ```
>> this.{x,y,z} = a;
>> ```
>>
>> and combining it with property spreading:
>>
>> ```
>> const result = { a, b, ...x.{ y, z }, ...p.{ q, r } };
>> ```
>>
>> Peter
>>
>> --
>> "There were drawings, and sheets of paper with writing on them, and it
>> seemed that they were the sustenance of life, that here were the warlocks,
>> almost the vehicles of destruction of man's life, but at the same time the
>> very reason for his living." --- Maeve Gilmore/Titus Awakes.
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>
>
>
> --
> [ ]s
>
> *--*
>
> *Felipe N. Moura*
> Web Developer, Google Developer Expert
> <https://developers.google.com/experts/people/felipe-moura>, Founder of
> BrazilJS <https://braziljs.org/> and Nasc <http://nasc.io/>.
>
> Website:  http://felipenmoura.com / http://nasc.io/
> Twitter:    @felipenmoura <http://twitter.com/felipenmoura>
> Facebook: http://fb.com/felipenmoura
> LinkedIn: http://goo.gl/qGmq
> ---------------------------------
> *Changing  the  world*  is the least I expect from  myself!
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20170317/e7256ed7/attachment.html>


More information about the es-discuss mailing list