数组扁平化

113 阅读1分钟
  1. 扁平化,顾名思义就是减少复杂性装饰,使其事物本身更简洁、简单,突出主题。
  2. 数组扁平化,对着上面意思套也知道了,就是将一个复杂的嵌套多层的数组,一层一层的转化为层级较少或者只有一层的数组。 数组扁平化是指将多维数组变成一维或指定维数的数组
    const arr = [1, [2, [3, [4, 5]]], 6];
    // =>  [1, 2, 3, 4, 5, 6]
    console.log("数组:",arr);
    // 数组的flat方法
    // 传入 Infinity指的是遍历到底
    // 传入其他数字,是扁平化几层
    const res1 = arr.flat(Infinity)
    console.log("flat(Infinity):",res1);
    const res11 = arr.flat(2)
    console.log("flat(2):" ,res11);

    // 递归遍历
    const fn = (args) => {
      const newArr = []
      for(let i = 0; i < args.length; i ++) {
        if (Array.isArray(args[i])) {
          newArr.push(...fn(args[i]))
        } else {
          newArr.push(args[i])
        }
      }
      return newArr
    }
    const res2 = fn(arr)
    console.log("递归遍历: ",res2);

    // 利用reduce
    // reduce(callback, initial) 
    // callback: 回调函数  参数: 返回值,当前元素,当前对象索引,当前元素所属数组对象
    // initial:传给元素的初始值
    const flatten = (args) => {
      return args.reduce((pre, cur) => {
        return pre.concat(Array.isArray(cur) ? flatten(cur) : cur)
      }, [])
    }
    const res3 = flatten(arr)
    console.log("reduce:", res3);

    // 正则
    const res4 = JSON.parse("["+JSON.stringify(arr).replace(/\[|\]/g, '') + "]")
    console.log("正则:", res4);