/** * 生成随机图表id */ function generateRandomKey(prefix) { if (prefix == null) { prefix = 'chart' } var userAgent = window.navigator.userAgent .replace(/[^a-zA-Z0-9]/g, '') .split('') var mid = '' for (var i = 0; i < 12; i++) { mid += userAgent[Math.round(Math.random() * (userAgent.length - 1))] } var time = new Date().getTime() return prefix + '_' + mid + '_' + time } /** * 深度克隆数据,包括对象,数组,map * @param {*} obj 对象,数组,map */ function deepCopy(obj) { if (!isObject(obj) && !isMap(obj)) { return obj; } let cloneObj; if (isMap(obj)) { cloneObj = new Map(); for (let key of obj.keys()) { let value = obj.get(key); if (isMap(value) || isObject(value) || Array.isArray(obj)) { let copyVal = deepCopy(value); cloneObj.set(key, copyVal); } else { cloneObj.set(key, value); } } } else if (typeof obj === "function") { cloneObj = obj } else { cloneObj = Array.isArray(obj) ? [] : {}; if (obj instanceof HTMLElement) { cloneObj = obj.cloneNode(true) } else { for (let key in obj) { // if (obj.hasOwnProperty(key)) { if (Object.prototype.hasOwnProperty.call(obj, key)) { cloneObj[key] = isMap(obj[key]) || isObject(obj[key]) ? deepCopy(obj[key]) : obj[key]; } } } } return cloneObj; } /** * 判断参数是否是Object类型 * @param {*} o */ function isObject(o) { return ( !isMap(o) && (typeof o === 'object' || typeof o === 'function') && o !== null ); } /** * 判断参数是否是Map类型 * @param {*} obj */ function isMap(obj) { if (obj instanceof Map) { return true; } else { return false; } } // 替换temp中的${xxx}为指定内容 ,temp:字符串,这里指html代码,dataarry:一个对象{"xxx":"替换的内容"} // 例:luckysheet.replaceHtml("${image}",{"image":"abc","jskdjslf":"abc"}) ==> abc function replaceHtml(temp, dataarry) { return temp.replace(/\$\{([\w]+)\}/g, function (s1, s2) { var s = dataarry[s2]; if (typeof (s) != "undefined") { return s; } else { return s1; } }); } function hasChinaword(s) { var patrn = /[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi; if (!patrn.exec(s)) { return false; } else { return true; } } export { isMap, isObject, deepCopy, generateRandomKey, replaceHtml }