Overview
Implement classnames(...args) that joins class names. Supports strings, objects (keys with truthy values), and arrays.
Examples
classnames('foo', { bar: true, baz: false }, 'qux'); // 'foo bar qux'
classnames('a', ['b', { c: true }]); // 'a b c'Solution
Reveal solution
function classnames(...args) {
const classes = [];
for (const arg of args) {
if (!arg) continue;
if (typeof arg === 'string') classes.push(arg);
else if (Array.isArray(arg)) classes.push(classnames(...arg));
else if (typeof arg === 'object') {
for (const [k, v] of Object.entries(arg)) { if (v) classes.push(k); }
}
}
return classes.filter(Boolean).join(' ');
}classnames.js
Classnames
mediumcodingJavaScriptStrings
Overview
Implement classnames(...args) that joins class names. Supports strings, objects (keys with truthy values), and arrays.
Examples
classnames('foo', { bar: true, baz: false }, 'qux'); // 'foo bar qux'
classnames('a', ['b', { c: true }]); // 'a b c'Solution
Reveal solution
function classnames(...args) {
const classes = [];
for (const arg of args) {
if (!arg) continue;
if (typeof arg === 'string') classes.push(arg);
else if (Array.isArray(arg)) classes.push(classnames(...arg));
else if (typeof arg === 'object') {
for (const [k, v] of Object.entries(arg)) { if (v) classes.push(k); }
}
}
return classes.filter(Boolean).join(' ');
}NameTopicDifficulty
103 of 103 problems