UNPKG

xcn

Version:

一个用于字符串拼接的小工具,多用于 class name 的拼接

63 lines (60 loc) 2.02 kB
import { isTrue, isArray, isString, isNumber, isFunction, isUndefined } from 'a-type-of-js'; /** * * 合并 class * * merge class name * */ function xcn(...classNameList) { /** 临时 */ const template = []; /** 移除空白 */ const removeBlank = (str) => str .trim() .replace(/undefined/g, ' ') .replace(/\s+/g, ' ') .split(' ') .sort() .join(' '); /** 混合值 */ const mergeNewValue = (newValue) => { if (isUndefined(newValue) || !isString(newValue)) return; const newList = removeBlank(newValue).split(' '); if (newList.length) template.push(...newList); }; classNameList.forEach(classNameItem => { // 数据为 undefined 或 null 或 false 或 true 或 '' 或 [] 或 {} if (!classNameItem || isTrue(classNameItem)) return; // 数据为数组类型 if (isArray(classNameItem)) classNameItem.forEach(childItem => mergeNewValue(xcn(childItem))); // 数据为 string 类型 else if (isString(classNameItem) || isNumber(classNameItem)) mergeNewValue(classNameItem.toString()); // 数据为函数类型 else if (isFunction(classNameItem)) { const result = classNameItem(); if (isString(result)) mergeNewValue(result); else result.forEach(item => mergeNewValue(xcn(item))); } else { // 数据为 object 类型 for (const key in classNameItem) { if (Object.prototype.hasOwnProperty.call(classNameItem, key)) { const element = classNameItem[key]; if (true === element) mergeNewValue(key); } } } }); const result = removeBlank(Array.from(new Set(template)).filter(Boolean).join(' ')); return (result ?? undefined); } export { xcn as default, xcn };