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

James Treworgy jamietre at gmail.com
Fri Mar 17 12:54:37 UTC 2017


>
>  I have seen code that test for typeof arr.map === 'function'


Is the intent of this to test if something is an array? It seems that that
code is fundamentally brittle (I mean, anyone can create anything with a
"map" method). I see the point generally of being wary of extending Object
-- but the same logic would seem to imply you can't use *any* legacy method
names on *any *new constructs to avoid false positives for old ways of
testing things... :-/

A safer alternative might be to simply provide easier interop with Map and
Set -- if we would be allowed to give them "map" and "filter" methods

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

More versbose but also clearly places extendend processing capabilities
into the realm of a "Map" object rather than {}





On Fri, Mar 17, 2017 at 8:48 AM, Michał Wadas <michalwadas at gmail.com> wrote:

> 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> 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
>>
>>
>
>
> _______________________________________________
> es-discuss mailing listes-discuss at mozilla.orghttps://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/127afbd1/attachment-0001.html>


More information about the es-discuss mailing list