この解答例はChatGPTによって生成されています,正しいかは自己判断で。
BFE.devでのAI解答例 - JavaScript コーディング問題
125. classNames()を実装する
解法例:
function classNames(...args) {
let result = '';
for (const arg of args) {
if (arg === null || arg === undefined || typeof arg === 'symbol' || typeof arg === 'bigint') {
continue;
}
if (typeof arg === 'string' || typeof arg === 'number') {
result += `${arg} `;
} else if (Array.isArray(arg)) {
result += `${classNames(...arg)} `;
} else {
for (const prop in arg) {
if (Object.prototype.hasOwnProperty.call(arg, prop) && arg[prop]) {
result += `${prop} `;
}
}
}
}
return result.trim();
}
解法のポイント:
- 与えられた引数リスト(
args
)をfor...ofでループする。 - falsy valuesをスキップする。具体的には、
null
,undefined
,symbol
,bigint
は無視する。 typeof arg
がstring
またはnumber
の場合、そのままresult
に追加する。Array.isArray(arg)
の場合、再帰的にclassNames()
を呼び出す。- それ以外の場合、
for...in
ループでオブジェクト(arg
)のpropertyをループし、keyがstringかつvalueがtruthyの場合にのみresult
に追加する。 - 返り値の文字列の最後に余計なスペースがあるかもしれないため、最後に
.trim()
を呼び出してスペースを削除する。