UNPKG

ol-extent

Version:

a JavaScript library for openlayers extent

206 lines (190 loc) 4.45 kB
/* eslint no-useless-escape: "off" */ const SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g const MOZ_HACK_REGEXP = /^moz([A-Z])/ const byteToHex = []; const rnds = new Array(16); for (let i = 0; i < 256; ++i) { byteToHex[i] = (i + 0x100).toString(16).substr(1); } /** * 判断对象是否有某个键值 * @param object_ * @param key_ * @returns {boolean} */ const has = (object_, key_) => { return typeof object_ === 'object' && object_.hasOwnProperty(key_); } const trim = function (string) { return (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, ''); } const camelCase = function (name) { return name.replace(SPECIAL_CHARS_REGEXP, function (_, separator, letter, offset) { return offset ? letter.toUpperCase() : letter }).replace(MOZ_HACK_REGEXP, 'Moz$1') } /** * stamp string * @param obj * @returns {*} */ const stamp = function (obj) { let key = '_event_id_'; obj[key] = obj[key] || (uuid()); return obj[key]; } /** * check is null * @param obj * @returns {boolean} */ const isNull = (obj) => { return obj == null; } /** * check is number * @param val * @returns {boolean} */ const isNumber = (val) => { return (typeof val === 'number') && !isNaN(val); } /** * 判断是否为对象 * @param value * @returns {boolean} */ const isObject = value => { const type = typeof value; return value !== null && (type === 'object' || type === 'function'); } /** * 判断是否为合法字符串 * @param value * @returns {boolean} */ const isString = (value) => { if (value == null) { return false; } return typeof value === 'string' || (value.constructor !== null && value.constructor === String); } /** * form uuid * Convert array of 16 byte values to UUID string format of the form: * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX * @param buf * @param offset * @returns {string} */ const bytesToUuid = (buf, offset) => { let i = offset || 0; const bth = byteToHex; return bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]]; } /** * math rng * @returns {any[]} */ const mathRNG = () => { for (let i = 0, r; i < 16; i++) { if ((i & 0x03) === 0) r = Math.random() * 0x100000000; rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; } return rnds; }; /** * get uuid * @param options * @param buf * @param offset * @returns {*|string} */ const uuid = (options, buf, offset) => { /* eslint-disable */ const i = buf && offset || 0; if (typeof (options) === 'string') { buf = options === 'binary' ? new Array(16) : null; options = null; } options = options || {}; const rnds = options.random || (options.rng || mathRNG)(); rnds[6] = (rnds[6] & 0x0f) | 0x40; rnds[8] = (rnds[8] & 0x3f) | 0x80; // Copy bytes to buffer, if provided if (buf) { for (let ii = 0; ii < 16; ++ii) { buf[i + ii] = rnds[ii]; } } return buf || bytesToUuid(rnds); }; /** * merge * @param target * @returns {*} */ const merge = (target) => { for (let i = 1, j = arguments.length; i < j; i++) { let source = arguments[i] || {}; for (const prop in source) { if (source.hasOwnProperty(prop)) { let value = source[prop]; if (value !== undefined) { target[prop] = value } } } } return target }; /** * get random server * @param min * @param max */ const getRandom = (min, max) => { const r = Math.random() * (max - min); let re = Math.round(r + min); re = Math.max(Math.min(re, max), min); return re; }; /** * clone deep * @param obj * @returns {{}} */ const cloneDeep = function (obj) { const keys = Object.keys(obj); const newObject = {}; for (let i = 0; i < keys.length; i++) { const key = keys[i]; if (typeof obj[key] === 'object') { newObject[key] = cloneDeep(obj[key]); } else { newObject[key] = obj[key]; } } return newObject; }; export { has, merge, stamp, uuid, trim, isNull, isString, isObject, isNumber, camelCase, getRandom, cloneDeep }