Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | 1x 1x 1x 1x 1x 1x 5x 5x 1x 1x 1x 1x 1x 1x 1x 1x 4x 4x 1x 1x 1x 1x 1x 1x 1x 3x 2x 1x 1x 1x 1x 1x 1x 2x 1x 1x 1x 1x 2x 1x 1x 1x 1x 1x 1x 2x 2x 1x 1x 1x 1x 1x 1x 1x 1x 5x 5x 9x 9x 8x 8x 2x 2x 9x 1x 1x 9x 4x 5x 1x 1x 1x 1x 1x 1x 1x 1x 4x 4x 1x 1x 1x 1x 1x 1x | import clonedeep from 'lodash.clonedeep'
/**
* @description 'For simple data, you use it is better.(Object who not includes object type data)'
* @param target
*/
export function deepCloneByStringfy<T extends object>(target: T): T {
return target && JSON.parse(JSON.stringify(target))
}
/**
* @description 'For complicated data, you use it is better.(Object who includes object type data)'
*/
export const deepClone = clonedeep
export function jsonToObject<T>(target: string, defV: unknown): T | typeof defV {
return target ? JSON.parse(target) : defV
}
/**
* @description notice: max >= min is need
* @param min
* @param max
*/
export function getRandomNumber(min: number, max: number) {
return min + Math.floor((max - min) * Math.random())
}
/**
* Will create a new arr, deep clone is deal
* @param arr
*/
export function getRandomOneInArr(arr: any[]) {
if (arr.length >= 1) {
return deepClone(arr)[getRandomNumber(0, arr.length - 1)]
} else {
throw 'Array has at least one element'
}
}
/**
* Will create a new arr, deep clone is deal
* @param arr
*/
export function getRandomArr<T extends unknown[]>(arr: T): T {
return deepClone(arr).sort(() => 0.5 - Math.random())
}
/**
* @description Map key operation for object.
* @param target
* @param mapKeys example ['name-value','age-label'], It means the 'name' key will change as 'value' key, and the 'age' key will change as 'label' key.
* @param replace @default(false)||true:will replace origin key to new key. false:will add new key that will just inherit old keys' value.
*/
export function getMapkeyedObj<T>(target: { [key: string]: any }, mapKeys: string[], replace = false): T {
const deepTarget = deepClone(target)
for (const mapKeyStr of mapKeys) {
const mapKeyArr = mapKeyStr.split('-')
if (mapKeyArr[0] in deepTarget) {
deepTarget[mapKeyArr[1]] = deepTarget[mapKeyArr[0]]
if (replace) {
delete deepTarget[mapKeyArr[0]]
}
} else {
throw `Can't find '${mapKeyArr[0]}' key in origin target.`
}
}
return deepTarget as T
}
/**
* @description Generate an array of specified length.
* @param length
* @param callback
*/
// eslint-disable-next-line no-unused-vars
export function getLengthArr<T = undefined>(length: number, callback?: (index?: number) => T): T[] {
return callback ? Array.from(Array(length), (value, index) => callback(index)) : Array.from(Array(length))
}
/**
* @description Prefer RFC 5897 to make the download result the same as the URL directly through the A tag.
* @param contentDisposition
*/
export function analysisFilename(contentDisposition: string): string {
let regex = /filename\*=\S+?''(.+?)(;|$)/
if (regex.test(contentDisposition)) {
return RegExp.$1
}
regex = /filename="{0,1}([\S\s]+?)"{0,1}(;|$)/
if (regex.test(contentDisposition)) {
return RegExp.$1
}
return 'File name get exception.'
}
|