UNPKG

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