dabbjs
Version:
general javascript library
83 lines (81 loc) • 2.13 kB
JavaScript
/**
* 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")
// }
// }