UNPKG

1.39 kBJavaScriptView Raw
1'use strict';
2function from$$1(x) {
3 return Array.isArray(x) ? x : [...x];
4}
5function concat$(x, ...ys) {
6 for (var y of ys)
7 x.push(...y);
8 return x;
9}
10function id(v) {
11 return v;
12}
13function cmp(a, b) {
14 return a < b ? -1 : (a > b ? 1 : 0);
15}
16function from$(x) {
17 return Array.isArray(x) ? x : [...x];
18}
19function from(vs, fm = null) {
20 return new Set(fm ? from$(vs).map(fm) : vs);
21}
22function differenceMap(x, y, fm = null) {
23 var s = from(y, fm);
24 var fm = fm || id;
25 var a = [], i = -1;
26 for (var u of x) {
27 var u1 = fm(u, ++i, x);
28 if (!s.has(u1))
29 a.push(u);
30 }
31 return a;
32}
33function differenceDual(x, y, fc = null, fm = null) {
34 var fc = fc || cmp, fm = fm || id;
35 var y1 = [...y].map(fm);
36 var a = [], i = -1;
37 x: for (var u of x) {
38 var u1 = fm(u, ++i, x);
39 for (var v1 of y1)
40 if (fc(u1, v1) === 0)
41 continue x;
42 a.push(u);
43 }
44 return a;
45}
46function difference(x, y, fc = null, fm = null) {
47 if (fc)
48 return differenceDual(x, y, fc, fm);
49 else
50 return differenceMap(x, y, fm);
51}
52function symmetricDifference(x, y, fc = null, fm = null) {
53 var x0 = from$$1(x), y0 = from$$1(y);
54 var ax = difference(x0, y0, fc, fm);
55 var ay = difference(y0, x0, fc, fm);
56 return concat$(ax, ay);
57}
58module.exports = symmetricDifference;