国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - JavaScript常用工具函數庫匯總

JavaScript常用工具函數庫匯總

2021-09-24 15:54大明的IT筆記 JavaScript

業務中比較常用的JavaScript工具函數,可以用在前端環境,也可以用在node服務端,統一整理,方便查閱,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下

對象或數組的深拷貝

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
 * 對象或數組的深拷貝
 * @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
}

精準判斷數據類型

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//精準判斷數據類型
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
}

日期格式化

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
 * 日期格式化
 * @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}`
}

把時間戳轉換為剩余的天、時、分、秒

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 * 把時間戳轉換為剩余的天、時、分、秒,一般應用于倒計時場景中
 * @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)
 }
}

從數組中隨機取出一項

?
1
2
3
4
// 從數組中隨機取出一項
function getRandomItemByArray(items) {
 return items[Math.floor(Math.random() * items.length)];
}

將有父子關系的數組轉換成樹形結構數據

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
let data = [
 { parentId: 0, id: 1, value: 'xxx' },
 { parentId: 1, id: 3, value: 'xxx' },
 { parentId: 4, id: 6, value: 'xxx' },
 { parentId: 3, id: 5, value: 'xxx' },
 { parentId: 2, id: 4, value: 'xxx' },
 { parentId: 1, id: 2, value: 'xxx' },
]
 
// 轉換為樹形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))

生成隨機字符串

?
1
2
3
4
// 隨機字符串
const randomStr = () => {
 return new Date().getTime() + '-' + Math.random().toString(36).substr(2)
}

過濾html標簽

?
1
2
3
4
5
6
7
// 過濾html標簽
const filterHTMLTag = (str) => {
 str = str.replace(/<\/?[^>]*>/g, ''); //去除HTML Tag
 str = str.replace(/[|]*\n/, '') //去除行尾空格
 str = str.replace(/&npsp;/ig, ''); //去掉npsp
 return str;
}

以上就是JavaScript常用工具函數庫匯總的詳細內容,更多關于JavaScript工具函數庫的資料請關注服務器之家其它相關文章!

原文鏈接:https://www.lmkjs.com/article/detail?id=5

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91香蕉视频| 躁躁躁日躁夜夜躁 | 日韩在线一区二区三区 | 人人射人人舔 | 午夜视频导航 | 久久成人一区 | 欧美日韩精品一区二区三区蜜桃 | 久久久一区二区精品 | 欧美国产视频 | 在线观看亚洲精品 | 日本va欧美va精品发布 | 免费毛片网站 | 成人综合站 | 色综合久久久久 | 国产成人精品久久二区二区 | 一区二区三区 | 中文字幕亚洲视频 | 欧美成人第一页 | 国产成人精品综合 | 国产999精品久久久久久 | 亚洲视频在线播放 | 国产免费av网站 | 久久久网 | 欧美日韩亚洲一区二区 | 国产成人精品久久 | 不用播放器的毛片 | 久久久亚洲精品视频 | 成人午夜精品久久久久久久3d | 黄色一级片免费播放 | 在线观看欧美一区 | 一区二区三区 | 成人免费一区二区三区视频软件 | 午夜在线电影 | 亚洲视频二区 | 一区二区三区高清在线 | 日本一区二区免费在线观看 | 三级在线不卡 | 噜噜噜噜狠狠狠7777视频 | 在线电影亚洲 | 精品视频一区二区 | 黄色一级片免费 |