Le 4 mars 2013 à 23:37, Claude Pache <claude.pa...@gmail.com> a écrit :

> The Set constructor accepts an iterable (including an Array and a Set) as an 
> argument to populate the newly-constructed Set with several values. There 
> should also be the possibility to add or remove multiple elements of an 
> already-constructed Set. That covers unions and differences, but it is more 
> generic. I would propose:
> 
> * Set.prototype.addMultiple(iterable): adds several elements
> * Set.prototype.deleteMultiple(iterable): removes several elements
> * Set.prototype.restrict(iterable): removes the elements that are not 
> enumerated by the iterable.

Better than 'restrict': a 'filter' method (as proposed by Tab Atkins Jr. below) 
similar to the one we have on Arrays. For the intersection of two Sets, we can 
write:

    mySet1.filter(x => mySet2.has(x))

This pattern has the advantage to be readily applicable to Maps and other 
collections with a clear semantic.

—Claude

> 
> (Naturally, the two first functions are also valuable for Maps.) For example, 
> in order to obtain the difference of mySet1 and mySet2 as a new Set, you 
> could write:
> 
>    (new Set(mySet1)).deleteMultiple(mySet2) // copies the elements of mySet1 
> in a new Set, then removes the elements of mySet2.
> 
> Another potentially useful generalisation is to accept multiple iterables 
> instead of one. For example:
> 
> * new Set(iterable, iterable, ...)
> 
> (ditto for the 'addMultiple', 'deleteMultiple' and 'restrict' methods), so 
> that we could write
> 
>    new Set(mySet1, mySet2, mySet3)
> 
> in order to create a new Set which is the union of mySet1, mySet2, and mySet3.
> 
> —Claude
> 
> Le 4 mars 2013 à 19:56, "Tab Atkins Jr." <jackalm...@gmail.com> a écrit :
> 
>> On Mon, Mar 4, 2013 at 10:08 AM,  <al...@instantbird.org> wrote:
>>> It would be useful to be able to form the intersection and the union of
>>> two Sets. These are natural operations that are currently not part of
>>> the API
>>> (http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets).
>>> 
>>> Similar methods would make sense for Map, but one would have to think
>>> about what to do in the case where the key but not the value matches.
>>> 
>>> An intersection is equivalent to a particular filter, so an alternative
>>> might be to add a method like Array.filter to Sets instead.
>>> 
>>> (I filed bug 847355 for this and was told this mailing list was the
>>> right place for this suggestion.)
>> 
>> Yes please, and also minus (remove from set A all elements it shares
>> with set B).  All three of these are fairly vital for a lot of code
>> using sets.
>> 
>> ~TJ
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss@mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to