UNPKG

xcn

Version:

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

68 lines (63 loc) 2.14 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var aTypeOfJs = require('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 (aTypeOfJs.isUndefined(newValue) || !aTypeOfJs.isString(newValue)) return; const newList = removeBlank(newValue).split(' '); if (newList.length) template.push(...newList); }; classNameList.forEach(classNameItem => { // 数据为 undefined 或 null 或 false 或 true 或 '' 或 [] 或 {} if (!classNameItem || aTypeOfJs.isTrue(classNameItem)) return; // 数据为数组类型 if (aTypeOfJs.isArray(classNameItem)) classNameItem.forEach(childItem => mergeNewValue(xcn(childItem))); // 数据为 string 类型 else if (aTypeOfJs.isString(classNameItem) || aTypeOfJs.isNumber(classNameItem)) mergeNewValue(classNameItem.toString()); // 数据为函数类型 else if (aTypeOfJs.isFunction(classNameItem)) { const result = classNameItem(); if (aTypeOfJs.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); } exports.default = xcn; exports.xcn = xcn;