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

Michał Wadas michalwadas at gmail.com
Fri Mar 17 12:48:00 UTC 2017


It's impossible to add new methods on Object.prototype because it would
be web-breaking - I have seen code that test for typeof arr.map ===
'function'

On Set topic, I have written basic proposal for this
<https://github.com/Ginden/set-methods>, but it was ignored so I didn't
write formal spec.


On 17/03/17 13:36, James Treworgy wrote:
> 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 <mailto: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 <mailto: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 <mailto:es-discuss at mozilla.org>
>         https://mail.mozilla.org/listinfo/es-discuss
>         <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://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 <mailto:es-discuss at mozilla.org>
>     https://mail.mozilla.org/listinfo/es-discuss
>     <https://mail.mozilla.org/listinfo/es-discuss>
>
>
>
>
> _______________________________________________
> 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/f9bcf5ba/attachment-0001.html>


More information about the es-discuss mailing list