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