JavaScript常用工具函式庫彙總
阿新 • • 發佈:2020-09-12
物件或陣列的深拷貝
/** * 物件或陣列的深拷貝 * @param {*} cloneObj 被克隆的物件 * @param {*} targetObj 克隆的目標物件 * @param {*} isOverride 若屬性重複,是否覆蓋被克隆物件的屬性 */ function deepClone(cloneObj,targetObj,isOverride = true) { const _toString = Object.prototype.toString if (_toString.call(cloneObj) !== '[object Array]' && _toString.call(cloneObj) !== '[object Object]') { return cloneObj } var cloneTarget = _toString.call(cloneObj) === '[object Array]' ? [] : {} for (let key in cloneObj) { if (Object.prototype.hasOwnProperty.call(cloneObj,key)) { if (_toString.call(cloneObj[key]) === '[object Array]' || _toString.call(cloneObj[key]) === '[object Object]') { cloneTarget[key] = deepClone(cloneObj[key]) } else { cloneTarget[key] = cloneObj[key] } } } if (targetObj && (_toString.call(cloneObj) === _toString.call(targetObj))) { //這裡要注意,克隆的目標物件也要deepClone下 cloneTarget = isOverride ? Object.assign(cloneTarget,deepClone(targetObj)) : Object.assign(deepClone(targetObj),cloneTarget) } return cloneTarget }
精準判斷資料型別
//精準判斷資料型別 function getVerifyDataTypes() { const types = ["String","Number","Boolean","Null","Undefined","Function","Object","Array","Date","Error","RegExp","Symbol","Map","Set"] let Type = {} // 示例用法:Type.isString('javascript') for (let i = 0; i < types.length; i++) { Type[`is${types[i]}`] = obj => Object.prototype.toString.call(obj) === `[object ${types[i]}]` } // 判斷字串是否為json格式 Type.isJsonStr = str => { if (typeof str == 'string') { try { let obj = JSON.parse(str); if (obj && typeof obj == 'object') { return true; } return false; } catch (e) { return false; } } else { return false; } } return Type }
日期格式化
/** * 日期格式化 * @param {*} date 日期物件 * @param {*} beforeHyphen 年月日連字元 * @param {*} afterHyphen 時分秒連字元 */ function formatDate(date = new Date(),beforeHyphen = '-',afterHyphen = ':') { const formatNumber = n => { n = n.toString() return n[1] ? n : `0${n}` } const year = date.getFullYear() const month = date.getMonth() + 1 const day = date.getDate() const hour = date.getHours() const minute = date.getMinutes() const second = date.getSeconds() const ymd = [year,month,day].map(formatNumber).join(beforeHyphen) const hms = [hour,minute,second].map(formatNumber).join(afterHyphen) return `${ymd} ${hms}` }
把時間戳轉換為剩餘的天、時、分、秒
/** * 把時間戳轉換為剩餘的天、時、分、秒,一般應用於倒計時場景中 * @param {*} timestamp 時間戳 */ function converTimestamp(timestamp) { const formatNumber = n => { n = n.toString() return n[1] ? n : `0${n}` } let day = Math.floor((timestamp / 1000 / 3600) / 24); let hour = Math.floor((timestamp / 1000 / 3600) % 24); let minute = Math.floor((timestamp / 1000 / 60) % 60); let second = Math.floor(timestamp / 1000 % 60); return { day: day,hour: formatNumber(hour),minute: formatNumber(minute),second: formatNumber(second) } }
從陣列中隨機取出一項
// 從陣列中隨機取出一項 function getRandomItemByArray(items) { return items[Math.floor(Math.random() * items.length)]; }
將有父子關係的陣列轉換成樹形結構資料
let data = [ { parentId: 0,id: 1,value: 'xxx' },{ parentId: 1,id: 3,{ parentId: 4,id: 6,{ parentId: 3,id: 5,{ parentId: 2,id: 4,id: 2,] // 轉換為樹形Array結構 function toTreeAry(arr,pId = 0) { return arr .filter(({ parentId }) => parentId === pId) .map(a => ({ ...a,children: toTreeAry(arr.filter(({ parentId }) => parentId !== pId),a.id) })) } // 轉換為樹形Object結構 function toTreeObj(arr,pId = 0) { let res = {} arr.filter(({ parentId }) => parentId === pId) .forEach(a => { res[a.id] = { ...a,children: toTreeObj(arr.filter(({ parentId }) => parentId !== pId),a.id) } }) return res } console.log(toTreeAry(data)) console.log(toTreeObj(data))
生成隨機字串
// 隨機字串 const randomStr = () => { return new Date().getTime() + '-' + Math.random().toString(36).substr(2) }
過濾html標籤
// 過濾html標籤 const filterHTMLTag = (str) => { str = str.replace(/<\/?[^>]*>/g,''); //去除HTML Tag str = str.replace(/[|]*\n/,'') //去除行尾空格 str = str.replace(/&npsp;/ig,''); //去掉npsp return str; }
以上就是JavaScript常用工具函式庫彙總的詳細內容,更多關於JavaScript工具函式庫的資料請關注我們其它相關文章!