gtht-miniapp-sdk
Version:
gtht-miniapp-sdk 是一套基于 Uniapp + Vue3 框架开发的兼容多端的 UI 组件库
135 lines (134 loc) • 3.79 kB
JavaScript
function splitWord(string) {
return string
.split(/[^a-zA-Z0-9$]+/)
.map((item) => item.split(/([A-Z][^A-Z]*)/))
.flat()
.filter(Boolean);
}
/**
* 将字符串首字母转换为小写格式。
*/
export function lowerFirst(string) {
return string.replace(/^[A-Z]/, (m) => m.toLowerCase());
}
/**
* 将字符串首字母转换为大写格式。
*/
export function upperFirst(string) {
return string.replace(/^[a-z]/, (m) => m.toUpperCase());
}
/**
* 将字符串转换为 PascalCase 格式(大驼峰)。
*/
export function pascalCase(string) {
return splitWord(string)
.map((word) => upperFirst(word.toLowerCase()))
.join('');
}
/**
* 将字符串转换为 camelCase 格式(小驼峰)。
*/
export function camelCase(string) {
return lowerFirst(pascalCase(string));
}
/**
* 将字符串转换为 Capitalize 格式(首字母大写,其余小写)。
*/
export function capitalize(string) {
return upperFirst(string.toLowerCase());
}
/**
* 将字符串转换为 kebab-case 格式(使用连字符拼接单词)。
*/
export function kebabCase(string) {
return splitWord(string)
.map((item) => item.toLowerCase())
.join('-');
}
/**
* 将字符串转换为 snake_case 格式(使用下划线拼接单词)。
*/
export function snakeCase(string) {
return splitWord(string)
.map((item) => item.toLowerCase())
.join('_');
}
/**
* 每n位数字添加一个分隔符
*/
export function addSeparator(num, separator = ',', digit = 3) {
return String(num).replace(new RegExp(`\\B(?=(\\d{${digit}})+(?!\\d))`, 'g'), separator);
}
/**
* 生成唯一ID,用于设置元素的ID,以便获取
*/
export function uniqid(prefix = '__gms_') {
return prefix + (~~(Math.random() * 10e8)).toString(36);
}
/**
* 把各种类型的参数拼接成字符串类名,以便解决小程序不支持 classObject 的问题
*/
export function classNames(...args) {
let result = '';
for (let i = 0; i < args.length; i++) {
const arg = args[i];
if (!arg)
continue;
if (typeof arg === 'string' || typeof arg === 'number') {
result += arg + ' ';
}
else if (Array.isArray(arg)) {
if (arg.length) {
const className = classNames(...arg);
if (className) {
result += className + ' ';
}
}
}
else if (typeof arg === 'object') {
for (const key in arg) {
const value = arg[key];
if (value) {
result += key + ' ';
}
}
}
}
return result;
}
function toKebabCase(str) {
return str
.replace(/^[A-Z]/, (m) => m.toLowerCase())
.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());
}
/**
* 把样式对象拼接成字符串,解决小程序不支持 styleObject 的问题。
*/
export function stringifyStyle(...args) {
let result = '';
for (let i = 0; i < args.length; i++) {
const arg = args[i];
if (!arg)
continue;
if (typeof arg === 'string') {
result += arg + ';';
}
else if (Array.isArray(arg)) {
if (arg.length) {
const string = stringifyStyle(...arg);
if (string) {
result += string + ';';
}
}
}
else if (typeof arg === 'object') {
for (const key in arg) {
const value = arg[key];
if (value || value === 0) {
result += `${toKebabCase(key)}:${value};`;
}
}
}
}
return result;
}