实现classNames方法
/**
* @param {...(any|Object|Array<any|Object|Array>)} args
* @return {string}
*/
export default function classNames(...args) {
const classes = [];
const processor = (param) => {
if (param === undefined || param === null) return;
const type = typeof param;
if (type === 'boolean') return;
if (type === 'number') {
if (param && !isNaN(param)) {
classes.push(param);
}
} else if (type === 'string') {
if (param) {
classes.push(param);
}
} else if (Array.isArray(param)) {
param.forEach(processor);
} else {
for (const key in param) {
if (param[key]) {
classes.push(key);
}
}
}
}
args.forEach(processor);
return classes.join(' ').trim();
}
要点
- 处理所有类型
- 数组和字符串有特殊处理