better-mock
Version:
Forked from Mockjs. Generate random data & Intercept ajax request. Support miniprogram.
74 lines (63 loc) • 2.06 kB
text/typescript
import { isArray, isDef, values } from '../utils'
import * as basic from './basic'
// 把字符串的第一个字母转换为大写。
export const capitalize = function (word: string): string {
word = word + ''
return word.charAt(0).toUpperCase() + word.substr(1)
}
// 把字符串转换为大写。
export const upper = function (str: string): string {
return (str + '').toUpperCase()
}
// 把字符串转换为小写。
export const lower = function (str: string): string {
return (str + '').toLowerCase()
}
// 从数组中随机选择一个
export const pickOne = function<T = any> (arr: T[]): T {
return arr[basic.natural(0, arr.length - 1)]
}
// 从源数组中随机选取一个或多个元素。当传入 min、max 时会选择多个元素并组成数组
export function pick<T = any>(arr: T[]): T;
export function pick<T = any>(arr: T[], min: number): T[];
export function pick<T = any>(arr: T[], min: number, max?: number): T[];
export function pick<T = any> (arr: T[], min: number = 1, max?: number): T | T[] {
// pick( item1, item2 ... )
if (!isArray(arr)) {
return pickOne<T>(Array.from(arguments))
}
// pick( [ item1, item2 ... ], count )
if (!isDef(max)) {
max = min
}
if (min === 1 && max === 1) {
return pickOne<T>(arr)
}
// pick( [ item1, item2 ... ], min, max )
return shuffle<T>(arr, min, max)
}
// 从map中随机选择一个
export const pickMap = function (map: object) {
return pick(values(map))
}
// 打乱数组中元素的顺序,并按照 min - max 返回。
export const shuffle = function<T = any> (arr: T[], min?: number, max?: number): T[] {
if (!Array.isArray(arr)) {
return []
}
const copy = arr.slice()
const length = arr.length
for (let i = 0; i < length; i++) {
const swapIndex = basic.natural(0, length - 1)
const swapValue = copy[swapIndex]
copy[swapIndex] = copy[i]
copy[i] = swapValue
}
if (min && max) {
return copy.slice(0, basic.natural(min, max))
}
if (min) {
return copy.slice(0, min)
}
return copy
}