UNPKG

dabbjs

Version:

general javascript library

83 lines (81 loc) 2.13 kB
/** * LINQ select many * @template TIn, TOut * @param {TIn} input array of input values * @param selectListFn extractor function (t: {@link TIn}) => {@link TOut}[] * @returns array {@link TOut}[] */ export const selectMany = (input, selectListFn) => input.reduce((out, inx) => { out.push(...selectListFn(inx)); return out; }, new Array()); /** * return unique items in array * @param x array */ export const unique = (x) => x.filter((elem, index) => x.indexOf(elem) === index); /** * * @param x * @param y * @returns */ export const union = (x, y) => unique(x.concat(y)); /** * groups an array by a function key * @param list Array of items of type `T` * @param getKey grouping key function * @returns a group object with keys and array of same key values */ export const groupBy = (list, getKey) => { let obj = {}; obj.length = 0; return list.reduce((previous, currentItem) => { const key = getKey(currentItem); if (!previous[key]) { previous[key] = []; previous.length++; } previous[key].push(currentItem); return previous; }, obj); }; export function setWritableProperty(obj, key, // <-- restrict to writable keys value) { obj[key] = value; } /* let x = { a: 1, b: 2, c: 3, d: 4 }; getProperty(x, "a"); getProperty(x, "m"); */ /** * gets an existing object property * @param obj object * @param key a key inside object * @returns */ export function getProperty(obj, key) { return obj[key]; } /** * sets an existing object property value * @param obj object * @param {Key} key a key inside object * @param {Type[Key]} value value * @returns object for linking */ export function setProperty(obj, key, value) { obj[key] = value; // return obj; } // const f: HTMLDialog = <any>void 0; // setProperty(f, 'header', "The Header"); // const setPropertyAttr = (dialog: HTMLDialog, prop: keyof HTMLDialog, value: any) => { // if (dialog.hasAttribute("non-cancellable")) { // setProperty(dialog, prop, false); // dialog[prop] = false; // dialog.removeAttribute("non-cancellable") // } // }