hd-utils
Version:
A handy utils for modern JS developers
39 lines (38 loc) • 1.17 kB
JavaScript
/**
* @description It takes any number of arguments, and returns a string of all the arguments that are truthy,
* separated by spaces.
*/
export default function classNames(...args) {
const classes = [];
const hasOwn = {}.hasOwnProperty;
for (let i = 0; i < args.length; i++) {
const arg = args[i];
if (!arg)
continue;
const argType = typeof arg;
if (argType === 'string' || argType === 'number') {
classes.push(arg);
}
else if (Array.isArray(arg)) {
if (arg.length) {
const inner = classNames.apply(null, arg);
if (inner) {
classes.push(inner);
}
}
}
else if (argType === 'object') {
if (arg.toString === Object.prototype.toString) {
for (let key in arg) {
if (hasOwn.call(arg, key) && arg[key]) {
classes.push(key);
}
}
}
else {
classes.push(arg.toString());
}
}
}
return classes.join(' ');
}