使用迭代的方式实现 flatten 函数?
可以使用迭代的方式实现 flatten
函数,具体思路如下:
- 创建一个新数组
result
来存放结果。 - 创建一个栈
stack
,将原数组作为第一个元素压入栈中。 - 当栈不为空时,取出栈顶元素,如果该元素是一个数组,则将其展开后的每个元素压入栈中。
- 如果该元素不是一个数组,则将其加入到
result
中。 - 重复步骤 3 和 4,直到栈为空。
下面是代码实现:
function flatten(array) { const result = []; const stack = [array]; while (stack.length > 0) { const item = stack.pop(); if (Array.isArray(item)) { for (let i = item.length - 1; i >= 0; i--) { stack.push(item[i]); } } else { result.push(item); } } return result.reverse(); }
这里使用了一个技巧,就是在将数组元素压入栈中时,从数组的末尾开始遍历,这样就可以保证压入栈中的顺序和展开后的顺序是一致的,最后再将结果翻转一下即可。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论