業(yè)務(wù)開發(fā)中常用的方法整理芜茵,持續(xù)更新,后續(xù)打算打成npm包提供下載
1倡蝙、
2九串、獲取url中的某個(gè)參數(shù)
/**
* @description
* @param {String} variable 要獲取的字段名稱
*/
export function getQueryVariable(variable) {
// 普通url路由
const query = window.location.search.substring(1)
const vars = query.split('&')
for (let i = 0; i < vars.length; i++) {
const pair = vars[i].split('=')
if (pair[0] === variable) {
return pair[1]
}
}
// hash路由
const w = location.hash.indexOf('?')
const hashQuery = location.hash.substring(w + 1)
const hashVars = hashQuery.split('&')
for (let i = 0; i < hashVars.length; i++) {
const pair = hashVars[i].split('=')
if (pair[0] === variable) {
return pair[1]
}
}
return undefined
}
3、駝峰轉(zhuǎn)下劃線
/**
* @param data 需要轉(zhuǎn)換的數(shù)據(jù)
* @returns {{}|*}
*/
export function objectHumpToLine(data) {
if (typeof data != 'object' || !data) return data
if (Array.isArray(data)) {
return data.map(item => objectHumpToLine(item))
}
const newData = {}
for (let key in data) {
let newKey = key.replace(/([A-Z])/g, (p, m) => `_${m.toLowerCase()}`)
newData[newKey] = objectHumpToLine(data[key])
}
return newData
}
4寺鸥、下劃線轉(zhuǎn)駝峰
/**
* @param data 需要轉(zhuǎn)換的數(shù)據(jù)
* @returns {{}|*}
*/
export function lineToCamel(data) {
if (typeof data != 'object' || !data) return data
if (Array.isArray(data)) {
return data.map(item => lineToCamel(item))
}
const newData = {}
for (let key in data) {
let newKey = key.replace(/_([a-z])/g, (p, m) => m.toUpperCase())
newData[newKey] = lineToCamel(data[key])
}
return newData
}
5猪钮、隨機(jī)生成數(shù)字
/**
* 示例:生成長(zhǎng)度為 12 的隨機(jī)數(shù):randomNumber(12)
* 示例:生成 3~23 之間的隨機(jī)數(shù):randomNumber(3, 23)
*
* @param1 最小值 | 長(zhǎng)度
* @param2 最大值
* @return int 生成后的數(shù)字
*/
export function randomNumber() {
// 生成 最小值 到 最大值 區(qū)間的隨機(jī)數(shù)
const random = (min, max) => {
return Math.floor(Math.random() * (max - min + 1) + min)
}
if (arguments.length === 1) {
let [length] = arguments
// 生成指定長(zhǎng)度的隨機(jī)數(shù)字,首位一定不是 0
let nums = [...Array(length)
.keys()].map((i) => (i > 0 ? random(0, 9) : random(1, 9)))
return parseInt(nums.join(''))
} else if (arguments.length >= 2) {
let [min, max] = arguments
return random(min, max)
} else {
return Number.NaN
}
}
6胆建、隨機(jī)生成字符串
/**
* 隨機(jī)生成字符串
* @param length 字符串的長(zhǎng)度
* @param chats 可選字符串區(qū)間(只會(huì)生成傳入的字符串中的字符)
* @return string 生成的字符串
*/
export function randomString(length, chats) {
if (!length) length = 1
if (!chats) chats = '0123456789qwertyuioplkjhgfdsazxcvbnm'
let str = ''
for (let i = 0; i < length; i++) {
let num = randomNumber(0, chats.length - 1)
str += chats[num]
}
return str
}
7烤低、深拷貝
// 深拷貝 主要解決數(shù)組里面有函數(shù)的
export function deepCopy(source) {
if (!isObject(source)) return source //如果不是對(duì)象的話直接返回
let target = Array.isArray(source) ? [] : {} //數(shù)組兼容
for (var k in source) {
if (source.hasOwnProperty(k)) {
if (typeof source[k] === 'object') {
target[k] = deepCopy(source[k])
} else {
target[k] = source[k]
}
}
}
return target
}