New Set methods
See formal spec WIP.
See proposal extending Set and Map with Array-like methods.
Proposal
This proposal does not change syntax of language.
New methods based on set theory are added to Set.prototype.
Set.prototype.intersection(iterable)- method creates newSetinstance by set intersection operation.Set.prototype.union(iterable)- method creates newSetinstance by set union operation.Set.prototype.difference(iterable)- method creates newSetwithout elements present initerable.Set.prototype.symmetricDifference(iterable)- returnsSetof elements found only in eitherthisor initerable.Set.prototype.isSubsetOf(iterable)Set.prototype.isDisjointFrom(iterable)Set.prototype.isSupersetOf(iterable)
(Semi)relevant previous discussions
- Map#map and Map#filter
- Map.prototype.map and Map.prototype.filter (spec) + Set
- Map: filter/map and more
- Original topic regarding this proposal
- Newer topic regarding this proposal
Motivations
reduces need to depend on Immutable.js
Set<T>reduces boilerplate code when dealing with common use cases of
Setno new syntax
Adoption
Zet implements the features of this proposal. It includes static versions of all methods, and also implements
map,filterandreduceforSets.Very similar API was found in popular Collections.js (205k downloads per month)
This proposal is inspired by Set API from Immutable.js (3M downloads per month)
Comparison with Immutable.js
- No static
intersection,unionmethods in this proposal union,intersection,differencetakes single argument
Comparison with other languages
See other languages document to get overview of Set methods in other languages.
Not included in this proposal but worth considering
- Static
Set.union(...iterables),Set.intersection(...iterables)
Polyfill
Naming
See naming bikeshedding document for details.
We decided to choose:
- Symmetric difference -
symmetricDifference - Intersection -
intersection - Union -
union - Difference -
difference