实现思路
- 遍历嵌套数组:使用递归方法来遍历嵌套数组,因为数组的嵌套层级不确定。
- 判断元素类型:对于每个遍历到的元素,判断其是否为数组。如果是数组,则递归调用函数继续处理该子数组;如果是数字,则进行奇偶判断。
- 奇偶处理:如果数字是偶数,将其乘以2;如果是奇数,保持不变。
- 性能优化:在递归过程中,尽量减少不必要的计算和中间数据的存储。避免创建过多的临时数组,而是直接将处理后的数字添加到结果数组中。
- 边界情况处理:考虑输入可能为空数组、单个数字、或者只有一层数组的情况。
代码实现
function customSymbolLogic(arr) {
let result = [];
function traverse(subArr) {
subArr.forEach((element) => {
if (Array.isArray(element)) {
traverse(element);
} else if (typeof element === 'number') {
if (element % 2 === 0) {
result.push(element * 2);
} else {
result.push(element);
}
}
});
}
traverse(arr);
return result;
}
性能优化
- 减少中间数据存储:在遍历过程中直接将处理后的数字添加到结果数组,而不是先收集所有数字再处理。
- 避免不必要的函数调用:对于简单的奇偶判断和乘法操作,直接在遍历过程中执行,不单独封装成函数。
边界情况处理
- 空数组:当输入为空数组
[]
时,函数会返回空数组 []
,因为 forEach
对空数组不执行任何操作。
- 单个数字:如果输入是单个数字,如
5
,需要将其包装成数组 [5]
后传入函数,函数会正确处理并返回 [5]
。
- 单层数组:对于单层数组
[1, 2, 3]
,函数会按规则处理并返回 [1, 4, 3]
。