/** * @author Martin Karkowski * @email m.karkowski@zema.de * @create date 2021-11-23 11:21:57 * @modify date 2021-11-23 11:21:57 * @desc [description] */ import { rgetattr } from "./objectMethods"; const __sentinal = { unique: "value", }; /** * Extracts the unique values of an map. * * @author M.Karkowski * @export * @template K * @template V * @param {Map} map * @return {*} {Set} */ export function extractUniqueValues(map: Map, path = ""): Set { return new Set(extractValues(map, path)); } export function extractValues(map: Map, path = ""): Array { const s = new Array(); for (const v of map.values()) { if (path) { const data: D | typeof __sentinal = rgetattr(v, path, __sentinal); if (data !== __sentinal) { if (Array.isArray(data)) { data.map((item) => s.push(item)); } else { s.push(data as D); } } } else { if (Array.isArray(v)) { v.map((_v) => { s.push(_v as D); }); } else { s.push(v as any as D); } } } return s; } /** * * * @author M.Karkowski * @export * @template D * @template K * @param {Map} map * @param {string} [path=""] * @return {*} {Map} */ export function transformValues( map: Map, path = "" ): Map { const m = new Map(); for (const [k, v] of map.entries()) { if (path) { const data: D | typeof __sentinal = rgetattr(v, path, __sentinal); if (data !== __sentinal) { m.set(k, data as D); } } else { m.set(k, v as any as D); } } return m; } /** * Reverses the given map. * * @author M.Karkowski * @export * @template K * @template V * @param {Map} map * @return {*} {Map>} */ export function reverse(map: Map): Map> { const m = new Map>(); for (const [k, v] of map.entries()) { if (Array.isArray(v)) { for (const _v of v) { if (!m.has(_v)) { m.set(_v, new Set()); } m.get(_v).add(k); } } else { if (!m.has(v)) { m.set(v, new Set()); } m.get(v).add(k); } } return m; }