复杂数组的处理方法之多维数组扁平化

1.需求:

将数组[1,2,[3,4,[5,6]],7,[8,[9,10]]] 转换为 [1,2,3,4,5,6,7,8,9,10]

2.实现方式:

(1)map加递归

思路:先准备好一个空数组,map遍历原数组并使用Array.isArray()判断数组的每一项是否为数组,如果其中某项是一个数组,则通过递归函数继续遍历,不是数组就添加到准备好的空数组中

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <meta http-equiv="X-UA-Compatible" content="IE=edge">

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>Document</title>

扫描二维码关注公众号,回复: 15619930 查看本文章

</head>

<body>

  <script>

    const numList = [1, 2, [3, 4, [5, 6]], 7, [8, [9, 10]]];

    function expandArr (arr) {

      const newArr = []

      function mapArr (arr) {

        arr.map(item => Array.isArray(item) ? mapArr(item) : newArr.push(item))

        return newArr

      }

      return mapArr(arr)

    }

    const res = expandArr(numList)

    console.log(res, '最终结果');

  </script>

</body>

</html>

(2)reduce加递归(第一种方法的优化)

思路:reduce遍历原数组并使用Array.isArray()判断数组的每一项是否为数组,如果是数组通过递归继续遍历,不是数组就将当前项与结果合并,直到reduce方法返回最后一次累加的结果

 const numList = [1, 2, [3, 4, [5, 6]], 7, [8, [9, 10]]];

    function expandArr (arr) {

      return arr.reduce((newArr, item) => newArr.concat(Array.isArray(item) ? expandArr(item) : item), [])

    }

    const res = expandArr(numList)

    console.log(res, '最终结果');

数组各种方法的使用,可以参考我的另一篇文章:

标题:操作数组方法的参数、返回值分别是什么?地址:https://mp.csdn.net/mp_blog/creation/editor/128056253

猜你喜欢

转载自blog.csdn.net/weixin_48082900/article/details/131419473