name:
src/Utilities/Filter.ts
-rw-r--r--
2628
1import {
2 RefError
3} from "../Errors";
4
5/**
6 * Static class to help filter down Arrays
7 */
8class Filter {
9 /**
10 * Converts string values in array to 0
11 * @param arr to convert
12 * @returns {Array} array in which all string values have been converted to 0.
13 */
14 static stringValuesToZeros(arr: Array<any>) : Array<any> {
15 let toReturn = [];
16 for (let i = 0; i < arr.length; i++) {
17 if (typeof arr[i] === "string") {
18 toReturn.push(0);
19 } else {
20 toReturn.push(arr[i]);
21 }
22 }
23 return toReturn;
24 }
25
26 /**
27 * Flatten an array of arrays of ...etc.
28 * @param values array of values
29 * @returns {Array} flattened array
30 */
31 static flatten(values: Array<any>) : Array<any> {
32 return values.reduce(function (flat, toFlatten) {
33 return flat.concat(Array.isArray(toFlatten) ? Filter.flatten(toFlatten) : toFlatten);
34 }, []);
35 }
36
37 /**
38 * Flatten an array of arrays of... etc, but throw an error if any are empty references.
39 * @param values array of values
40 * @returns {Array} flattened array
41 */
42 static flattenAndThrow(values: Array<any>) : Array<any> {
43 if (values.length === 0) {
44 throw new RefError("Reference does not exist.");
45 }
46 return values.reduce(function (flat, toFlatten) {
47 if (Array.isArray(toFlatten) && toFlatten.length === 0) {
48 throw new RefError("Reference does not exist.");
49 }
50 return flat.concat(Array.isArray(toFlatten) ? Filter.flattenAndThrow(toFlatten) : toFlatten);
51 }, []);
52 }
53
54 /**
55 * Filter out all strings from an array.
56 * @param arr to filter
57 * @returns {Array} filtered array
58 */
59 static filterOutStringValues(arr: Array<any>) : Array<any> {
60 let toReturn = [];
61 for (let i = 0; i < arr.length; i++) {
62 if (typeof arr[i] !== "string") {
63 toReturn.push(arr[i]);
64 }
65 }
66 return toReturn;
67 }
68
69 /**
70 * Filters out non number values.
71 * @param arr to filter
72 * @returns {Array} filtered array
73 */
74 static filterOutNonNumberValues(arr: Array<any>) : Array<any> {
75 let toReturn = [];
76 for (let i = 0; i < arr.length; i++) {
77 if (typeof arr[i] !== "string" && typeof arr[i] !== "boolean") {
78 toReturn.push(arr[i]);
79 }
80 }
81 return toReturn;
82 }
83
84 /**
85 * Returns an array as unique values.
86 * @param arr - to filter down to uniques.
87 * @returns {Array}
88 */
89 static unique(arr: Array<any>) : Array<any> {
90 let a = [];
91 for (let i = 0, l = arr.length; i < l; i++) {
92 if (a.indexOf(arr[i]) === -1 && arr[i] !== '') {
93 a.push(arr[i]);
94 }
95 }
96 return a;
97 }
98}
99
100export {
101 Filter
102}