arrayUtils.js 3.8 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.24/esri/copyright.txt for details.
  4. */
  5. import{isNone as t}from"./maybe.js";import n from"./RandomLCG.js";function e(t){if(!t)return;return t.length>0?t[0]:void 0}function r(t){if(!t)return;const n=t.length;return n>0?t[n-1]:void 0}function o(t){return t}function f(t,n=o){if(!t||0===t.length)return;let e=t[0],r=n(e);for(let o=1;o<t.length;++o){const f=t[o],l=Number(n(f));l>r&&(r=l,e=f)}return e}function l(t,n=o){return f(t,(t=>-n(t)))}function u(t,n){return n?t.filter(((t,e,r)=>r.findIndex(n.bind(null,t))===e)):t.filter(((t,n,e)=>e.indexOf(t)===n))}function i(n,e,r){if(t(n)&&t(e))return!0;if(t(n)||t(e)||n.length!==e.length)return!1;if(r){for(let t=0;t<n.length;t++)if(!r(n[t],e[t]))return!1}else for(let t=0;t<n.length;t++)if(n[t]!==e[t])return!1;return!0}function c(t,n){let e=t.length!==n.length;t.length=n.length;for(let r=0;r<n.length;++r)t[r]!==n[r]&&(t[r]=n[r],e=!0);return e}function s(t,n,e){let r,o;return e?(r=n.filter((n=>!t.some((t=>e(t,n))))),o=t.filter((t=>!n.some((n=>e(n,t)))))):(r=n.filter((n=>!t.includes(n))),o=t.filter((t=>!n.includes(t)))),{added:r,removed:o}}function h(t,n,e){return t&&n?e?t.filter((t=>n.findIndex((n=>e(t,n)))>-1)):t.filter((t=>n.includes(t))):[]}function a(t){return t&&"number"==typeof t.length}function d(t,n){const e=t.length;if(0===e)return[];const r=[];for(let o=0;o<e;o+=n)r.push(t.slice(o,o+n));return r}const g=!!Array.prototype.fill;function m(t,n){if(g)return new Array(t).fill(n);const e=new Array(t);for(let r=0;r<t;r++)e[r]=n;return e}function p(t,n){void 0===n&&(n=t,t=0);const e=new Array(n-t);for(let r=t;r<n;r++)e[r-t]=r;return e}function M(t,n,e){const r=t.length;let o=0,f=r-1;for(;o<f;){const e=o+Math.floor((f-o)/2);n>t[e]?o=e+1:f=e}const l=t[o];return e?n>=t[r-1]?-1:l===n?o:o-1:l===n?o:-1}function w(t,n,e){if(!t||0===t.length)return;const r=t.length-1,o=t[0];if(n<=e(o))return o;const f=t[r];if(n>=e(f))return f;let l=0,u=0,i=r;for(;l<i;){u=l+Math.floor((i-l)/2);const o=t[u],f=e(o);if(f===n)return o;if(n<f){if(u>0){const r=t[u-1],l=e(r);if(n>l)return n-l>=f-n?o:r}i=u}else{if(u<r){const r=t[u+1],l=e(r);if(n<l)return n-f>=l-n?r:o}l=u+1}}return t[u]}function x(t){return t.reduce(((t,n)=>t.concat(n||[])),[])}class y{constructor(){this.last=0}}const b=new y;function v(t,n,e,r){r=r||b;const o=Math.max(0,r.last-10);for(let l=o;l<e;++l)if(t[l]===n)return r.last=l,l;const f=Math.min(o,e);for(let l=0;l<f;++l)if(t[l]===n)return r.last=l,l;return-1}function A(t,n,e,r){const o=null==e?t.length:e,f=v(t,n,o,r);if(-1!==f)return t[f]=t[o-1],null==e&&t.pop(),n}const j=new Set;function z(t,n,e=t.length,r=n.length,o,f){if(0===r||0===e)return e;j.clear();for(let u=0;u<r;++u)j.add(n[u]);o=o||b;const l=Math.max(0,o.last-10);for(let u=l;u<e;++u)if(j.has(t[u])&&(f&&f.push(t[u]),j.delete(t[u]),t[u]=t[e-1],--e,--u,0===j.size||0===e))return j.clear(),e;for(let u=0;u<l;++u)if(j.has(t[u])&&(f&&f.push(t[u]),j.delete(t[u]),t[u]=t[e-1],--e,--u,0===j.size||0===e))return j.clear(),e;return j.clear(),e}function I(t,n,e){const r=t.length;if(n>=r)return t.slice(0);const o=O(e),f=new Set,l=[];for(;l.length<n;){const n=Math.floor(o()*r);f.has(n)||(f.add(n),l.push(t[n]))}return l}function O(t){return t?(C.seed=t,()=>C.getFloat()):Math.random}function S(t,n){const e=O(n);for(let r=t.length-1;r>0;r--){const n=Math.floor(e()*(r+1)),o=t[r];t[r]=t[n],t[n]=o}return t}const C=new n;function F(t,n){const e=t.indexOf(n);return-1!==e?(t.splice(e,1),n):null}export{y as PositionHint,w as binaryFindClosest,M as binaryIndexOf,m as constant,s as difference,i as equals,e as first,x as flatten,v as indexOf,h as intersect,a as isArrayLike,r as last,f as max,l as min,I as pickRandom,p as range,F as remove,A as removeUnordered,z as removeUnorderedMany,S as shuffle,d as splitIntoChunks,u as unique,c as update};