@utilify/object
Version:
These functions simplify many common operations in JavaScript/TypeScript development when working with objects and data structures.
2 lines (1 loc) • 2.06 kB
JavaScript
;function e(e){return null!==e&&"object"==typeof e&&e.constructor===Object}exports.clone=function(e){const r=Array.isArray(e)?[]:{};for(const t in e)r[t]=e[t];return r},exports.deepClone=function r(t){const n=Array.isArray(t)?[]:{};for(const o in t)Array.isArray(t[o])||e(t[o])?n[o]=r(t[o]):n[o]=t[o];return n},exports.deepFreeze=function r(t){const n=Object.freeze(t);for(const o in n)e(t[o])&&r(t[o]);return n},exports.deepMerge=function r(...t){return t.reduce(((t,n)=>{for(const o in n)Array.isArray(n[o])||e(n[o])?t[o]=r(t[o],n[o]):t[o]=n[o];return t}),Array.isArray(t[0])?[]:{})},exports.flattenObj=function r(t,n=".",o=""){let s={};for(const c in t)if(t.hasOwnProperty(c)){const i=o?`${o}${n}${c}`:c;e(t[c])?Object.assign(s,r(t[c],n,i)):s[i]=t[c]}return s},exports.freeze=function(e){return Object.freeze(e)},exports.interpolate=function r(t,n){const o={};for(const s in t)e(t[s])?o[s]=r(t[s],n):"string"==typeof t[s]?o[s]=t[s].replace(/{{(\w+)}}/g,((e,r)=>r in n?n[r]:`{{${r}}}`)):o[s]=t[s];return o},exports.isDeepEqual=function e(r,t){const n=Object.keys(r),o=Object.keys(t);if(n.length!==o.length)return!1;for(const s of n){if(!o.includes(s))return!1;if(typeof r[s]!=typeof t[s])return!1;if(null!==r[s]&&"object"==typeof r[s]){if(!e(r[s],t[s]))return!1}else if(!Object.is(r[s],t[s]))return!1}return!0},exports.isEqual=function(e,r){return Object.is(e,r)},exports.merge=function(...e){return e.reduce(((e,r)=>{for(const t in r)e[t]=r[t];return e}),Array.isArray(e[0])?[]:{})},exports.omit=function(e,r){return Object.keys(e).reduce(((t,n)=>(r.includes(n)||(t[n]=e[n]),t)),{})},exports.pick=function(e,r){return r.reduce(((r,t)=>(t in e&&(r[t]=e[t]),r)),{})},exports.sanitizeObj=function r(t,n,o){const s={};for(const c in t)e(t[c])?s[c]=r(t[c],n,o):n.includes(t[c])?void 0!==o&&(s[c]=o):s[c]=t[c];return s},exports.unflattenObj=function(e,r="."){let t={};const n=new RegExp(`${r}`);for(const o in e)if(n.test(o)){const n=o.split(r);let s=t;n.slice(0,-1).forEach((e=>{e in s||(s[e]={}),s=s[e]})),s[n[n.length-1]]=e[o]}else t[o]=e[o];return t};