使用递归扁平化嵌套数组时末端字符串元素未被推入如何解决
数组扁平化递归实现问题修复
核心错误点
你代码的问题是递归调用返回的处理结果没有被合并到上层的结果数组中:
每次调用funcTest都会生成一个独立的空数组final,递归调用funcTest(el)时,子调用确实会把深层元素处理为扁平数组返回,但你没有将这个返回值加入当前层的final,因此深层处理的内容全部丢失,只有最外层的非数组元素5和'7'会被保留。
修正后代码
const nested = [[[[[['string']]]]], 5, '7']; const funcTest = function (arr) { const final = []; arr.forEach(el => { if (Array.isArray(el)) { // 合并递归返回的子数组扁平结果 final.push(...funcTest(el)); } else { final.push(el); } }); return final; }; console.log(funcTest(nested)); // 输出结果:['string', 5, '7']
执行逻辑说明
- 遍历元素时如果判定为数组类型,调用递归函数处理该子数组,拿到子数组扁平化后的返回结果
- 通过扩展运算符
...将返回的子数组的所有项推入当前层的final数组 - 非数组类型元素直接推入
final - 每一层处理完成后向上返回合并后的结果,最终得到完整的扁平数组
内容的提问来源于stack exchange,提问作者G-T
相关产品推荐
相关产品推荐

