数组扁平化(迭代递归)

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递归实现数组扁平化(数组降维)

JavaScript实现纯数组扁平化(数组降维)

JavaScript递归树形扁平数组笔试题reduceforEachconcat

JavaScript实现扁平数组结构与JSON树形结构相互转换递归reducecontinuepushconcatfor of

使用带有递归的reduce函数从多级树中生成一个扁平的id数组?

数组扁平化