spreadsheet
typeScript/javascript spreadsheet parser, with formulas.
git clone https://git.vogt.world/spreadsheet.git
Log | Files | README.md
← All files
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}