JavaScript之数组扁平化

吐槽君 分类:javascript

每天做个总结吧,坚持就是胜利!

    /**
        @date 2021-06-05
        @description JavaScript之数组扁平化
    */
 

壹(序)

日常开发中我们经常会需要处理数组扁平化问题,现在已经有flat方法,今天自己实现一下。

贰(实现)

使用递归,遇到数组则再次调用处理函数:

const flat = (arr) => {
  const res = [];

  arr.forEach((item) => {
    if (Array.isArray(item)) {
      res.push(...flat(item));
    } else {
      res.push(item);
    }
  });

  return res;
};

const arr = [1, [2, [3]], [4, 5, [6, 7, [8]]]];
console.log(flat(arr)); // [ 1, 2, 3, 4, 5, 6, 7, 8 ]
 

叁(引申)

真实的flat函数是可以传入一个参数depth,表示递归深度,默认为1

const arr = [1, [2, [3]], [4, 5, [6, 7, [8]]]];
console.log(arr.flat()); // [1, 2, [3], 4, 5, [6, 7, [8]]]
 

下面实现depth指定递归深度:


const flat = (arr, depth = 1) => {
  if (depth === 0) {
    return arr;
  }

  const res = [];

  arr.forEach((item) => {
    if (Array.isArray(item)) {
      res.push(...flat(item, depth - 1));
    } else {
      res.push(item);
    }
  });

  return res;
};

const arr = [1, [2, [3]], [4, 5, [6, 7, [8]]]];
console.log(flat(arr, 2)); // [ 1, 2, 3, 4, 5, 6, 7, [ 8 ] ]
console.log(flat(arr, 3)); // [ 1, 2, 3, 4, 5, 6, 7, 8 ]
 

回复

我来回复
  • 暂无回复内容