可以使用迭代的方式实现 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();
}
这里使用了一个技巧,就是在将数组元素压入栈中时,从数组的末尾开始遍历,这样就可以保证压入栈中的顺序和展开后的顺序是一致的,最后再将结果翻转一下即可。