Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | 7x 85x 460x 460x 460x 460x 75x 385x 385x 9x 9x 10x 1x 10x 2x 1x | /** * ## DataStructures Utility * @exports * - FixedSizeArray<T> * - MapObject * @module DataStructures * @category Utility */ /** * Recursive function to map an object and its properties to a string key Map. * * @param objectToMap - Object to be mapped. * @param map - Map to store the object and its properties. * @param parentKey - Key of the parent object. Optional. */ export const MapObject = ( objectToMap: Record<string, any>, map: Map<string, object | Array<any> | string | boolean>, parentKey?: string ) => { for (const key in objectToMap) { Eif (objectToMap.hasOwnProperty(key)) { const value = objectToMap[key]; const newKey = parentKey ? `${parentKey}.${key}` : key; if (typeof value === "object" && !(value instanceof Array)) { MapObject(value, map, newKey); } else if ( value instanceof Array || typeof value === "string" || typeof value === "boolean" ) { map.set(newKey, value); } else E{ console.error("MapObject Not expecting this value!", key, value); } } } }; /** * A class that represents a fixed-size array that removes the oldest item * when a new item is added and the size exceeds the maximum. */ export class FixedSizeArray<T> { /** * The data stored in the array */ private readonly data: T[]; /** * The maximum size of the array */ private readonly maxSize: number; /** * Creates a new instance of the FixedSizeArray * * @param maxSize The maximum size of the array */ constructor(maxSize: number) { this.data = []; this.maxSize = maxSize; } /** * Adds a new item to the array * * @param item The item to be added */ add(item: T) { if (this.data.length === this.maxSize) { this.data.shift(); } this.data.push(item); } /** * Returns the data stored in the array * * @returns The data stored in the array */ getData(): T[] { return this.data; } /** * Iterates over the items in the array and performs a callback function on each item * * @param callback A callback function to be performed on each item in the array */ forEach(callback: (item: T, index: number, array: T[]) => void) { this.data.forEach(callback); } } |