UNPKG

ts-lib-extended

Version:
63 lines (62 loc) 1.65 kB
/** * Gain keys and values from enum instances. Works with string, numeric and mixed enums * (properly ignoring the numeric index reverse lookup entries for numeric enums) * * @export * @class EnumerableObject * @since 1.2.0 */ export class EnumerableObject { /** * Gain enum values (equivalent to Object.values(...)) * * @public * @template {Enumerable} E * @param {E} enum_ * @returns {ReadonlyArray<EnumerableValue<E>>} * @since 1.2.0 */ values(enum_) { const values = []; this.disassemble(enum_, (key_) => values.push(enum_[key_])); return values; } /** * Gain enum keys (equivalent to Object.keys(...)) * * @public * @template {Enumerable} E * @param {E} enum_ * @returns {ReadonlyArray<keyof E>} * @since 1.2.0 */ keys(enum_) { const keys = []; this.disassemble(enum_, (key_) => keys.push(key_)); return keys; } /** * Gain enum entries (equivalent to Object.entries(...)) * * @public * @template {Enumerable} E * @param {E} enum_ * @returns {ReadonlyArray<EnumerableEntry<E>>} * @since 1.2.0 */ entries(enum_) { const entries = []; this.disassemble(enum_, (key_) => entries.push([key_, enum_[key_]])); return entries; } disassemble(enum_, processKey_) { const keys = Object.keys(enum_); for (let i = 0; i < keys.length; i++) { const key = keys[i]; if (/^[0-9]+$/.exec(key)) { continue; } processKey_(key); } } }