New Set.prototype methods

# Michał Wadas (5 years ago)

I have written proposal for new Set.prototype methods.

Ginden/set-methods

New methods would be:

  • Set.prototype.filter
  • Set.prototype.map
  • Set.prototype.some
  • Set.prototype.every
  • Set.prototype.find
  • Set.prototype.union
  • Set.prototype.intersect
  • Set.isSet

TBA:

  • Set.prototype.difference (or .except)

%SetIteratorPrototype% is discussed in text.

BTW, is there any way to subclass SetIterator or check if object is SetIterator? If not it seems like issue for subclassing Set.

# Calvin Metcalf (5 years ago)

I've done some work on this (calvinmetcalf/set.up), symmetrical difference, compliment and xor would also be helpful

# Tab Atkins Jr. (5 years ago)

On Sun, May 29, 2016 at 6:13 AM, Michał Wadas <michalwadas at gmail.com> wrote:

I have written proposal for new Set.prototype methods.

Ginden/set-methods

New methods would be:

Set.prototype.filter Set.prototype.map Set.prototype.some Set.prototype.every Set.prototype.find Set.prototype.union Set.prototype.intersect Set.isSet

TBA:

Set.prototype.difference (or .except)

Yes please to all of these. I've added most of them manually to Set.prototype on some of my projects.

One additional request in a related vein - Set.prototype.chain - like .map, but the callback's value is iterated and added to the result set. (We need to coordinate this with an identical method on Array; .chain just seems to be one of the more common names for this operation in JS-land.) I use this a lot to, for example, expand items into related terms.

# Alexander Jones (5 years ago)

Most of these would be better off as generic iterable-consuming, iterator-producing functions. You know, Single Responsibility Principle, and all that.

As for the rest, IMO union, intersect, and the zoo of other missing set theory operators would probably be better off as multiple dispatch functions, as either operators or unified call syntax... I think I've seen proposals for all of those floating around.

# Michał Wadas (5 years ago)

First of all "generic iterator methods" are discussed in this proposal. Second of all, presence of them isn't incompatible with new methods on Set instances (discussed in document too). Third of all, generic iterator methods aren't even proposed, and it's over two years since I have heard about this idea for first time.

# Michał Wadas (5 years ago)

Methods xor, relativeComplement (aka subtract), addElements, removeElements were added to strawman.

Desired signature of method accepting iterables is discussed further in section .union, .intersect, .xor, .relativeComplement desired signature Ginden/set-methods#union-intersect-xor-relativecomplement-desired-signature

For consistency with Immutable.js it's preferred to allow multiple iterables. I will probably change polyfills to reflect this change.

Ginden/set-methods

Feedback is welcome.

# Michał Wadas (5 years ago)

I have fixed few minor issues in polyfill, changed wording in Markdown document and submitted files polyfill.js and README.MD as a non-member.

I can write formal specification if strawman get any traction. Opinions and any form of feedback are welcome.

Ginden/set