1 | function from$$1(x) {
|
2 | return Array.isArray(x) ? x : [...x];
|
3 | }
|
4 | function concat$(x, ...ys) {
|
5 | for (var y of ys)
|
6 | x.push(...y);
|
7 | return x;
|
8 | }
|
9 | function id(v) {
|
10 | return v;
|
11 | }
|
12 | function cmp(a, b) {
|
13 | return a < b ? -1 : (a > b ? 1 : 0);
|
14 | }
|
15 | function from$(x) {
|
16 | return Array.isArray(x) ? x : [...x];
|
17 | }
|
18 | function from(vs, fm = null) {
|
19 | return new Set(fm ? from$(vs).map(fm) : vs);
|
20 | }
|
21 | function 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 | }
|
32 | function 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 | }
|
45 | function 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 | }
|
51 | function 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 | }
|
57 | export default symmetricDifference;
|