A polyfill for the ECMAScript proposal “Set Methods for JavaScript” (documentation for this proposal).
Don’t trust this code:
- It’s mostly untested.
Caveats:
- The focus is on simple code, not on spec compliance.
Functionality:
- This polyfill implements all methods specified in the proposal.
- This polyfill deliberately does not provide any additional functionality.
npm install @rauschma/set-methods-polyfill
import '@rauschma/set-methods-polyfill/install';
import assert from 'node:assert/strict';
assert.deepEqual(
new Set(['a', 'b', 'c']).union(new Set(['c', 'd'])),
new Set(['a', 'b', 'c', 'd'])
);
assert.deepEqual(
new Set(['a', 'b', 'c']).intersection(new Set(['c', 'd'])),
new Set(['c'])
);
assert.deepEqual(
new Set(['a', 'b', 'c']).difference(new Set(['c', 'd'])),
new Set(['a', 'b'])
);
assert.deepEqual(
new Set(['a', 'b', 'c']).isSubsetOf(new Set(['a'])),
false
);
assert.deepEqual(
new Set(['a', 'b', 'c']).isSupersetOf(new Set(['a'])),
true
);
import {union, intersection, difference, isSubsetOf, isSupersetOf} from '@rauschma/set-methods-polyfill';
import assert from 'node:assert/strict';
assert.deepEqual(
union(new Set(['a', 'b', 'c']), new Set(['c', 'd'])),
new Set(['a', 'b', 'c', 'd'])
);
assert.deepEqual(
intersection(new Set(['a', 'b', 'c']), new Set(['c', 'd'])),
new Set(['c'])
);
assert.deepEqual(
difference(new Set(['a', 'b', 'c']), new Set(['c', 'd'])),
new Set(['a', 'b'])
);
assert.deepEqual(
isSubsetOf(new Set(['a', 'b', 'c']), new Set(['a'])),
false
);
assert.deepEqual(
isSupersetOf(new Set(['a', 'b', 'c']), new Set(['a'])),
true
);
- ECMAScript proposal “Set Methods for JavaScript”: https://github.com/tc39/proposal-set-methods
- Blog post: https://2ality.com/2022/12/set-methods.html