以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
125. 实现classNames()

function classNames(...args) {
  return args.flat().filter(arg => {
    if (typeof arg === 'string' || typeof arg === 'number') {
      return true;
    }
    if (Array.isArray(arg)) {
      return Boolean(arg.length);
    }
    if (typeof arg === 'object' && arg !== null) {
      return Object.values(arg).some(Boolean);
    }
    return false;
  }).map(arg => {
    if (typeof arg === 'number' || typeof arg === 'string') {
      return arg.toString();
    }
    if (typeof arg === 'object') {
      return Object.keys(arg)
        .filter(key => Boolean(arg[key]))
        .join(' ')
    }
    return '';
  }).join(' ')
}

解题思路

这道题其实就是对输入的参数进行类型判断,然后相应的筛选和处理。首先对待处理的参数,扁平化后进行过滤,筛选掉 null, undefined, Symbol(), 1n, false, true,下面对剩下的参数进行类型处理。

  • 如果是数字或字符串,直接添加到结果数组中
  • 如果是数组,把里面的每一个元素进行递归处理,然后扁平化结果
  • 如果是对象,按照题目所要求的方式处理一下属性和值。

最后,将结果数组拼接成字符串返回即可。

复杂度分析

  • 时间复杂度:$O(n)$
  • 空间复杂度:$O(n)$

因为只是对输入做类型处理和筛选,因此时间和空间都是线性的。