UNPKG

2.19 kBJavaScriptView Raw
1'use strict';
2
3var flatten = require('../../utils/array').flatten;
4var identify = require('../../utils/array').identify;
5
6function factory(type, config, load, typed) {
7 var MatrixIndex = load(require('../../type/matrix/MatrixIndex'));
8 var size = load(require('../matrix/size'));
9 var subset = load(require('../matrix/subset'));
10 var compareNatural = load(require('../relational/compareNatural'));
11
12 /**
13 * Check whether a (multi)set is a subset of another (multi)set. (Every element of set1 is the element of set2.)
14 * Multi-dimension arrays will be converted to single-dimension arrays before the operation.
15 *
16 * Syntax:
17 *
18 * math.setIsSubset(set1, set2)
19 *
20 * Examples:
21 *
22 * math.setIsSubset([1, 2], [3, 4, 5, 6]) // returns false
23 * math.setIsSubset([3, 4], [3, 4, 5, 6]) // returns true
24 *
25 * See also:
26 *
27 * setUnion, setIntersect, setDifference
28 *
29 * @param {Array | Matrix} a1 A (multi)set
30 * @param {Array | Matrix} a2 A (multi)set
31 * @return {boolean} true | false
32 */
33 var setIsSubset = typed('setIsSubset', {
34 'Array | Matrix, Array | Matrix': function ArrayMatrixArrayMatrix(a1, a2) {
35 if (subset(size(a1), new MatrixIndex(0)) === 0) {
36 // empty is a subset of anything
37 return true;
38 } else if (subset(size(a2), new MatrixIndex(0)) === 0) {
39 // anything is not a subset of empty
40 return false;
41 }
42 var b1 = identify(flatten(Array.isArray(a1) ? a1 : a1.toArray()).sort(compareNatural));
43 var b2 = identify(flatten(Array.isArray(a2) ? a2 : a2.toArray()).sort(compareNatural));
44 var inb2 = void 0;
45 for (var i = 0; i < b1.length; i++) {
46 inb2 = false;
47 for (var j = 0; j < b2.length; j++) {
48 if (compareNatural(b1[i].value, b2[j].value) === 0 && b1[i].identifier === b2[j].identifier) {
49 // the identifier is always a decimal int
50 inb2 = true;
51 break;
52 }
53 }
54 if (inb2 === false) {
55 return false;
56 }
57 }
58 return true;
59 }
60 });
61
62 return setIsSubset;
63}
64
65exports.name = 'setIsSubset';
66exports.factory = factory;
\No newline at end of file