supergeneric
Version:
Supergeneric JS helper functions... formatters, math functions, sort functions, etc.
2 lines (1 loc) • 2.94 kB
JavaScript
;const t=(t,e)=>t<e?-1:t>e?1:0,e=t=>{let e=0;for(const r of t)e+=r;return e},r=(t=[])=>e(t)/t.length,o=t=>{throw new Error(t)},n=t=>e=>{if(e.length)return e.map(n(t));for(let r in e)e[r]=t(e[r],r);return e},s=(t,e)=>Math.floor(Math.random()*(e-t+1))+t;function a(t){return t[s(0,t.length-1)]}const i=t=>t[t.length-1],p=(...t)=>Object.assign({},...t),l=(t,e=0)=>{const r=Math.pow(10,e);return Math.round(t*r)/r};exports.ascending=t,exports.average=r,exports.binarySearch=(t=o("must include values"),e)=>(r=o("must include a target"))=>{let n,s=0,a=t.length,i=0;for(;i<1e3&&(n=s+(a-s>>1));){const o=e?e(t[n]):t[n];if(o===r)return{item:t[n],index:n};o>r?a=n:s=n,i++}},exports.convert=(t,...e)=>{for(const r of e)t=n(r)(t);return t},exports.dates=(t,e)=>{const r=e.toLowerCase();return r.includes("time")||r.includes("date")?new Date(t):t},exports.descending=(t,e)=>t>e?-1:t<e?1:0,exports.first=t=>t[0],exports.generateHash=(t=6,e={})=>{const{ambiguous:r=!0,lower:o=!0,upper:n=!0,numeric:s=!0,alpha:i,symbols:p=!1,startWithLetter:l=!0,all:u,only:c,prefix:f=""}=e;if(!t)return f;const m=!1===i?"":"string"==typeof i?i:(!1===o?"":"string"==typeof o?o:"abcdefghijkmnopqrstuvwxyz"+(r?"l":""))+(!1===n?"":"string"==typeof n?n:"ABCDEFGHJKLMNPQRSTUVWXYZ"+(r?"IO":"")),d=u||m+(!1===s?"":"string"==typeof s?s:"123456789"+(r?"0":""))+(!1===p?"":"string"==typeof p?p:"!@#$%^&*");if(""===c)throw new Error("Character set cannot be empty");if(!c&&!d)throw new Error("Character set cannot be empty");const x=c||d;let h=x;if(!c&&l&&!u&&m&&(h=m),!h)throw new Error("Character set cannot be empty");let g=f+a(h);h=x;for(let e=1;e<t;e++)g+=a(h);return g},exports.last=i,exports.makePath=(...t)=>{const e=i(t),r=(null==e?void 0:e.delimiter)||"/";return(null==e?void 0:e.delimiter)&&t.pop(),t.filter(t=>void 0!==t&&""!==t).join(r).replace(r+r,r)},exports.max=t=>{let e=t[0];for(const r of t)r>e&&(e=r);return e},exports.mean=r,exports.median=(e,r)=>{const o=e.slice().sort(r||t),n=o.length>>1,s=o[n];return 1&o.length?s:"number"==typeof s?(o[n-1]+s)/2:o[n-1]},exports.merge=p,exports.mergeClean=(...t)=>{const e=p(...t);for(const t in e){void 0===e[t]&&delete e[t]}return e},exports.min=t=>{let e=t[0];for(const r of t)r<e&&(e=r);return e},exports.numbers=t=>{const e=Number(t);return isNaN(e)?t:e},exports.onlyNumbers=t=>t.filter(Number.isFinite),exports.random=s,exports.randomArray=(t=1,e=()=>Math.random())=>Array(t).fill(0).map(e),exports.randomItem=a,exports.range=(t=1,e={})=>Array.from({length:t},(t,r)=>{var o;return r+(null!==(o=e.from)&&void 0!==o?o:0)}),exports.required=o,exports.round=l,exports.rounder=(t=0)=>e=>l(e,t),exports.sortBy=function(t,{descending:e=!1}={}){const r=e?1:-1,o=-r;return"function"==typeof t?(e,n)=>t(e)<t(n)?r:o:(e,n)=>e[t]<n[t]?r:o},exports.stddev=t=>{const e=r(t);let o=0;for(const r of t)o+=Math.pow(r-e,2);return Math.sqrt(o/(t.length-1))},exports.sum=e,exports.transpose=t=>t[0].map((e,r)=>t.map(t=>t[r]));