以下为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)$
因为只是对输入做类型处理和筛选,因此时间和空间都是线性的。