在 Vue 项目中,我们通常会封装一些常用的 JavaScript 方法,以便在多个组件中复用。以下是一些常见的 Vue 项目中常封装的 JavaScript 方法:。
1. 格式化时间 在 Vue 项目中,我们通常需要将时间戳格式化为指定的日期格式。可以封装一个 formatDate 方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 function formatDate (date, fmt ) { const o = { 'M+' : date.getMonth () + 1 , 'd+' : date.getDate (), 'h+' : date.getHours (), 'm+' : date.getMinutes (), 's+' : date.getSeconds (), 'q+' : Math .floor ((date.getMonth () + 3 ) / 3 ), S : date.getMilliseconds (), }; if (/(y+)/ .test (fmt)) { fmt = fmt.replace (RegExp .$1 , (date.getFullYear () + '' ).substr (4 - RegExp .$1 .length )); } for (let k in o) { if (new RegExp ('(' + k + ')' ).test (fmt)) { fmt = fmt.replace (RegExp .$1 , RegExp .$1 .length === 1 ? o[k] : ('00' + o[k]).substr (('' + o[k]).length )); } } return fmt; }
2. 格式化金额 在 Vue 项目中,我们通常需要将金额格式化为指定的格式,比如添加千分位分隔符。可以封装一个 formatMoney 方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 function formatMoney (num ) { num = num.toString ().replace (/\$|\,/g , '' ); if (isNaN (num)) { num = '0' ; } const sign = num === (num = Math .abs (num)); num = Math .floor (num * 100 + 0.50000000001 ); let cents = num % 100 ; num = Math .floor (num / 100 ).toString (); if (cents < 10 ) { cents = '0' + cents; } for (let i = 0 ; i < Math .floor ((num.length - (1 + i)) / 3 ); i++) { num = num.substring (0 , num.length - (4 * i + 3 )) + ',' + num.substring (num.length - (4 * i + 3 )); } return (sign ? '' : '-' ) + num + '.' + cents; }
3. 防抖和节流 在 Vue 项目中,我们通常需要对一些频繁触发的事件进行防抖或节流,以避免性能问题。可以封装一个 debounce 或 throttle 方法:
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 function debounce (func, wait, immediate ) { let timeout; return function ( ) { const context = this ; const args = arguments ; const later = function ( ) { timeout = null ; if (!immediate) { func.apply (context, args); } }; const callNow = immediate && !timeout; clearTimeout (timeout); timeout = setTimeout (later, wait); if (callNow) { func.apply (context, args); } }; } function throttle (func, wait ) { let timeout; return function ( ) { const context = this ; const args = arguments ; if (!timeout) { timeout = setTimeout (function ( ) { timeout = null ; func.apply (context, args); }, wait); } }; }
4. 深度克隆对象 在 Vue 项目中,我们通常需要对一些对象进行深度克隆,以避免修改原对象。可以封装一个 clone 方法:
1 2 3 4 5 6 7 8 9 10 11 function clone (obj ) { let newObj = {}; if (obj instanceof Array ) { newObj = []; } for (let key in obj) { const val = obj[key]; newObj[key] = typeof val === 'object' ? clone (val) : val; } return newObj; }
5. 获取 URL 参数 在 Vue 项目中,我们通常需要从 URL 中获取参数,以便进行相应的处理。可以封装一个 getQueryParams 方法:
1 2 3 4 5 6 7 8 9 10 11 12 function getQueryParams (url ) { const params = {}; const search = url.split ('?' )[1 ]; if (search) { const pairs = search.split ('&' ); pairs.forEach (function (pair ) { pair = pair.split ('=' ); params[pair[0 ]] = decodeURIComponent (pair[1 ] || '' ); }); } return params; }
6. 判断数据类型 在 Vue 项目中,我们通常需要判断一个变量的数据类型,以便进行相应的处理。可以封装一个 getType 方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function getType (obj ) { const toString = Object .prototype .toString ; const map = { '[object Boolean]' : 'boolean' , '[object Number]' : 'number' , '[object String]' : 'string' , '[object Function]' : 'function' , '[object Array]' : 'array' , '[object Date]' : 'date' , '[object RegExp]' : 'regExp' , '[object Undefined]' : 'undefined' , '[object Null]' : 'null' , '[object Object]' : 'object' , }; return map[toString.call (obj)]; }
7. 字符串截取 在 Vue 项目中,我们通常需要对一些字符串进行截取,以便进行相应的处理。可以封装一个 substr 方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 function substr (str, start, len ) { if (start < 0 ) { start = str.length + start; } let end = start + len; if (end > str.length ) { end = str.length ; } let result = '' ; for (let i = start; i < end; i++) { result += str.charAt (i); } return result; }
8. 数组排序 在 Vue 项目中,我们通常需要对一些数组进行排序,以便进行相应的处理。可以封装一个 sort 方法:
1 2 3 4 5 6 7 8 9 10 11 function sort (arr, prop, order ) { return arr.sort (function (a, b ) { const val1 = prop ? a[prop] : a; const val2 = prop ? b[prop] : b; if (order === 'desc' ) { return val2 - val1; } else { return val1 - val2; } }); }
1 2 3 function sort (arr, callback ) { return arr.sort (callback); }
9. 获取对象属性 在 Vue 项目中,我们通常需要获取一个对象的某个属性值,以便进行相应的处理。可以封装一个 getProperty 方法:
1 2 3 4 5 6 7 8 9 10 11 function getProperty (obj, prop ) { const props = prop.split ('.' ); let result = obj; for (let i = 0 ; i < props.length ; i++) { if (!result) { return null ; } result = result[props[i]]; } return result; }
10. 数组分组 在 Vue 项目中,我们通常需要对一些数组进行分组,以便进行相应的处理。可以封装一个 groupBy 方法:
1 2 3 4 5 6 7 8 function groupBy (arr, prop ) { return arr.reduce (function (groups, item ) { const val = getProperty (item, prop); groups[val] = groups[val] || []; groups[val].push (item); return groups; }, {}); }
1 2 3 4 5 6 7 8 9 10 11 function groupBy (arr, key ) { const result = {}; for (let i = 0 ; i < arr.length ; i++) { const item = arr[i]; if (!result[item[key]]) { result[item[key]] = []; } result[item[key]].push (item); } return result; }
11. 数组去重 在 Vue 项目中,我们通常需要对一些数组进行去重,以避免重复数据的出现。可以封装一个 unique 方法:
1 2 3 function unique (arr ) { return Array .from (new Set (arr)); }
1 2 3 4 5 6 7 8 9 10 11 12 function uniqueObjects (arr, key ) { const result = []; const map = new Map (); for (let i = 0 ; i < arr.length ; i++) { const item = arr[i]; if (!map.has (item[key])) { map.set (item[key], true ); result.push (item); } } return result; }
12. 对象合并 在 Vue 项目中,我们通常需要将多个对象合并成一个对象,以便进行相应的处理。可以封装一个 merge 方法:
1 2 3 4 5 6 7 8 9 10 11 12 function merge ( ) { const result = {}; for (let i = 0 ; i < arguments .length ; i++) { const obj = arguments [i]; for (let key in obj) { if (obj.hasOwnProperty (key)) { result[key] = obj[key]; } } } return result; }
13. 判断是否为空对象 在 Vue 项目中,我们通常需要判断一个对象是否为空对象,以便进行相应的处理。可以封装一个 isEmptyObject 方法:
1 2 3 4 5 6 7 8 function isEmptyObject (obj ) { for (let key in obj) { if (obj.hasOwnProperty (key)) { return false ; } } return true ; }
14. 数组分页 在 Vue 项目中,我们通常需要对一些数组进行分页,以便进行相应的处理。可以封装一个 paginate 方法:
1 2 3 4 5 function paginate (arr, currentPage, pageSize ) { const startIndex = (currentPage - 1 ) * pageSize; const endIndex = startIndex + pageSize; return arr.slice (startIndex, endIndex); }
15. 数组求和 在 Vue 项目中,我们通常需要对一些数组进行求和,以便进行相应的处理。可以封装一个 sum 方法:
1 2 3 4 5 function sum (arr ) { return arr.reduce (function (prev, curr ) { return prev + curr; }, 0 ); }
16. 数组过滤 在 Vue 项目中,我们通常需要对一些数组进行过滤,以便进行相应的处理。可以封装一个 filter 方法:
1 2 3 4 5 6 7 8 9 function filter (arr, callback ) { const result = []; for (let i = 0 ; i < arr.length ; i++) { if (callback (arr[i], i, arr)) { result.push (arr[i]); } } return result; }
18. 对象转换为数组 在 Vue 项目中,我们通常需要将一个对象转换为数组,以便进行相应的处理。可以封装一个 toArray 方法:
1 2 3 4 5 6 7 8 9 function toArray (obj ) { const result = []; for (let key in obj) { if (obj.hasOwnProperty (key)) { result.push (obj[key]); } } return result; }
19. 数组扁平化 在 Vue 项目中,我们通常需要对一个多维数组进行扁平化处理,以便进行相应的处理。可以封装一个 flatten 方法:
1 2 3 4 5 6 7 8 9 10 11 function flatten (arr ) { const result = []; for (let i = 0 ; i < arr.length ; i++) { if (Array .isArray (arr[i])) { result.push (...flatten (arr[i])); } else { result.push (arr[i]); } } return result; }
1 2 3 4 5 function flatten (arr ) { return arr.reduce ((prev, curr ) => { return prev.concat (Array .isArray (curr) ? flatten (curr) : curr); }, []); }
20. 对象数组扁平化 在 Vue 项目中,我们通常需要对一个对象数组进行扁平化的处理,以便进行相应的处理。可以封装一个 flattenObjects 方法:
1 2 3 4 5 function flattenObjects (arr, key ) { return arr.reduce ((prev, curr ) => { return prev.concat (Array .isArray (curr[key]) ? flattenObjects (curr[key], key) : curr); }, []); }
21. 数组最大值 在 Vue 项目中,我们通常需要对一个数组进行求最大值的处理,以便进行相应的处理。可以封装一个 max 方法:
1 2 3 function max (arr ) { return Math .max (...arr); }
22. 数组最小值 在 Vue 项目中,我们通常需要对一个数组进行求最小值的处理,以便进行相应的处理。可以封装一个 min 方法:
1 2 3 function min (arr ) { return Math .min (...arr); }
23. 数组最大值和最小值 在 Vue 项目中,我们通常需要获取一个数组的最大值和最小值,以便进行相应的处理。可以封装一个 getMaxAndMin 方法:
1 2 3 4 5 function getMaxAndMin (arr ) { const max = Math .max .apply (null , arr); const min = Math .min .apply (null , arr); return { max, min }; }
24. 数组去除指定元素 在 Vue 项目中,我们通常需要对一个数组进行去除指定元素的处理,以便进行相应的处理。可以封装一个 removeItem 方法:
1 2 3 4 5 6 7 function removeItem (arr, item ) { const index = arr.indexOf (item); if (index > -1 ) { arr.splice (index, 1 ); } return arr; }
25. 数组随机排序 在 Vue 项目中,我们通常需要对一个数组进行随机排序的处理,以便进行相应的处理。可以封装一个 shuffle 方法:
1 2 3 4 5 6 7 function shuffle (arr ) { for (let i = arr.length - 1 ; i >= 0 ; i--) { const randomIndex = Math .floor (Math .random () * (i + 1 )); [arr[i], arr[randomIndex]] = [arr[randomIndex], arr[i]]; } return arr; }
26. 数组交集 在 Vue 项目中,我们通常需要对两个数组进行交集的处理,以便进行相应的处理。可以封装一个 intersection 方法:
1 2 3 function intersection (arr1, arr2 ) { return arr1.filter (item => arr2.includes (item)); }
27. 数组并集 在 Vue 项目中,我们通常需要对两个数组进行并集的处理,以便进行相应的处理。可以封装一个 union 方法:
1 2 3 function union (arr1, arr2 ) { return Array .from (new Set ([...arr1, ...arr2])); }
28. 数组差集 在 Vue 项目中,我们通常需要对两个数组进行差集的处理,以便进行相应的处理。可以封装一个 difference 方法:
1 2 3 function difference (arr1, arr2 ) { return arr1.filter (item => !arr2.includes (item)); }
以上这些方法只是一些常见的封装方法,实际上在 Vue 项目中可能会有更多的常用方法需要封装。