数组扁平化(迭代递归)
Posted tengyijun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组扁平化(迭代递归)相关的知识,希望对你有一定的参考价值。
测试用例 [[1, [2, [3, [11, 12, [13]], [14], [[15]], 4, 5, 6]], 5, 7],9,[1, 2],[[4, 5, [6]]]]
1.迭代
迭代方法会考虑到数组输出顺序。为了保证结果数组与原数组中的元素顺序一致,会用到一个栈结构。每次循环判断栈顶元素是否是数组,如果是数组就弹出,然后循环该数组逆序入栈。再进行循环,直到栈顶元素不是数组,结束当前循环,弹出栈顶元素,放入结果数组中。
function flat_iteration(arr) { const ans = [] const stack = [arr] while (stack.length) { while (Array.isArray(stack[stack.length - 1])) { const temp = stack.pop() for (let i = temp.length - 1; i >= 0; i--) stack.push(temp[i]) } if (stack.length) ans.push(stack.pop()) } return ans }
2.递归
function flat_recursion(arr) { const ans = [] function dfs(x) { if (Array.isArray(x)) { for (let i = 0, len = x.length; i < len; i++) dfs(x[i]) } else { ans.push(x) } } dfs(arr) return ans }
以上是关于数组扁平化(迭代递归)的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript递归树形扁平数组笔试题reduceforEachconcat
JavaScript实现扁平数组结构与JSON树形结构相互转换递归reducecontinuepushconcatfor of