123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /**
- * 检验数据是否为空
- */
- export const isEmpty = obj => {
- if (obj === '' || obj === null || obj === undefined) {
- return true
- } else if (obj.constructor === Array && obj.length === 0) {
- return true
- } else if (obj.constructor === Object && Object.keys(obj).length === 0) {
- return true
- } else {
- return false
- }
- }
- /**
- * 生成UUID
- */
- export const generateUUID = () => {
- let d = new Date().getTime()
- let uuid = 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
- // let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
- let r = (d + Math.random() * 16) % 16 | 0
- d = Math.floor(d / 16)
- return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16)
- })
- return uuid
- }
- /**
- * 移除空字符
- */
- export const removeNullCharacter = str => {
- return str.replace(/\\u([0-9]|[a-fA-F])([0-9]|[a-fA-F])([0-9]|[a-fA-F])([0-9]|[a-fA-F])/g, '')
- }
- /**
- * 格式化空字符为空字符串
- */
- export const formatNullCharacter = str => {
- if (!str) return ''
- return JSON.parse(removeNullCharacter(JSON.stringify(str)))
- }
- /**
- * 节流函数
- * fn是我们需要包装的事件回调, interval是时间间隔的阈值
- */
- export const throttle = (fn, interval) => {
- // last为上一次触发回调的时间
- let last = 0
- interval = interval || 1000
- // 将throttle处理结果当作函数返回
- return function() {
- // 保留调用时的this上下文
- let context = this
- // 保留调用时传入的参数
- let args = arguments
- // 记录本次触发回调的时间
- let now = +new Date()
- // 判断上次触发的时间和本次触发的时间差是否小于时间间隔的阈值
- if (now - last >= interval) {
- // 如果时间间隔大于我们设定的时间间隔阈值,则执行回调
- last = now
- fn.apply(context, args)
- }
- }
- }
- /**
- * 格式化得到aid值
- * @param {Object} buffer
- */
- export const ab2hex = function(buffer) {
- let hexArr = Array.prototype.map.call(
- new Uint8Array(buffer),
- function(bit) {
- return ('00' + bit.toString(16)).slice(-2);
- }
- );
- return hexArr.join('');
- };
- /**
- * 字符串转ArrayBuffer
- * @param {Object} str
- */
- export function stringToArrayBuffer(str) {
- var bytes = new Array();
- let len, c;
- len = str.length;
- for (let i = 0; i < len; i++) {
- c = str.charCodeAt(i);
- if (c >= 0x010000 && c <= 0x10FFFF) {
- bytes.push(((c >> 18) & 0x07) | 0xF0);
- bytes.push(((c >> 12) & 0x3F) | 0x80);
- bytes.push(((c >> 6) & 0x3F) | 0x80);
- bytes.push((c & 0x3F) | 0x80);
- } else if (c >= 0x000800 && c <= 0x00FFFF) {
- bytes.push(((c >> 12) & 0x0F) | 0xE0);
- bytes.push(((c >> 6) & 0x3F) | 0x80);
- bytes.push((c & 0x3F) | 0x80);
- } else if (c >= 0x000080 && c <= 0x0007FF) {
- bytes.push(((c >> 6) & 0x1F) | 0xC0);
- bytes.push((c & 0x3F) | 0x80);
- } else {
- bytes.push(c & 0xFF);
- }
- }
- let array = new Int8Array(bytes.length);
- for (let i in bytes) {
- array[i] = bytes[i];
- }
- return array.buffer;
- }
- /**
- * ArrayBuffer转字符串
- * @param {Object} arr
- */
- export function arrayBufferToString(arr) {
- if (typeof arr === 'string') {
- return arr;
- }
- let dataview = new DataView(arr);
- let ints = new Uint8Array(arr.byteLength);
- for (let i = 0; i < ints.length; i++) {
- ints[i] = dataview.getUint8(i);
- }
- arr = ints;
- let str = '',
- _arr = arr;
- for (let i = 0; i < _arr.length; i++) {
- let one = _arr[i].toString(2),
- v = one.match(/^1+?(?=0)/);
- if (v && one.length == 8) {
- let bytesLength = v[0].length;
- let store = _arr[i].toString(2).slice(7 - bytesLength);
- for (let st = 1; st < bytesLength; st++) {
- store += _arr[st + i].toString(2).slice(2);
- }
- str += String.fromCharCode(parseInt(store, 2));
- i += bytesLength - 1;
- } else {
- str += String.fromCharCode(_arr[i]);
- }
- }
- return str;
- }
- export function byteLength(str) {
- // 匹配所有的单字节字符和双字节字符
- const matches = str.match(/[^\x00-\xff]/g);
- // 计算字符串的字节长度
- return str.length + (matches ? matches.length : 0);
- }
|