UNPKG

lib0

Version:

> Monorepo of isomorphic utility functions

109 lines (97 loc) 2.03 kB
/** * Utility functions for working with EcmaScript objects. * * @module object */ /** * @return {Object<string,any>} obj */ export const create = () => Object.create(null) /** * Object.assign */ export const assign = Object.assign /** * @param {Object<string,any>} obj */ export const keys = Object.keys /** * @template V * @param {{[k:string]:V}} obj * @param {function(V,string):any} f */ export const forEach = (obj, f) => { for (const key in obj) { f(obj[key], key) } } /** * @todo implement mapToArray & map * * @template R * @param {Object<string,any>} obj * @param {function(any,string):R} f * @return {Array<R>} */ export const map = (obj, f) => { const results = [] for (const key in obj) { results.push(f(obj[key], key)) } return results } /** * @param {Object<string,any>} obj * @return {number} */ export const length = obj => keys(obj).length /** * @param {Object<string,any>} obj * @param {function(any,string):boolean} f * @return {boolean} */ export const some = (obj, f) => { for (const key in obj) { if (f(obj[key], key)) { return true } } return false } /** * @param {Object|undefined} obj */ export const isEmpty = obj => { // eslint-disable-next-line for (const _k in obj) { return false } return true } /** * @param {Object<string,any>} obj * @param {function(any,string):boolean} f * @return {boolean} */ export const every = (obj, f) => { for (const key in obj) { if (!f(obj[key], key)) { return false } } return true } /** * Calls `Object.prototype.hasOwnProperty`. * * @param {any} obj * @param {string|symbol} key * @return {boolean} */ export const hasProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key) /** * @param {Object<string,any>} a * @param {Object<string,any>} b * @return {boolean} */ export const equalFlat = (a, b) => a === b || (length(a) === length(b) && every(a, (val, key) => (val !== undefined || hasProperty(b, key)) && b[key] === val))