この解答例は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 argstringまたはnumberの場合、そのままresultに追加する。
  • Array.isArray(arg)の場合、再帰的にclassNames()を呼び出す。
  • それ以外の場合、for...inループでオブジェクト(arg)のpropertyをループし、keyがstringかつvalueがtruthyの場合にのみresultに追加する。
  • 返り値の文字列の最後に余計なスペースがあるかもしれないため、最後に.trim()を呼び出してスペースを削除する。