数组扁平化实现(ES6 flat())

79 阅读1分钟

flat()  方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。

参数

  • depth 可选 指定要提取嵌套数组的结构深度,默认值为 1。 <=1时都不会扁平化

参考MDN上对flat()的用法

详细请看MDN文档

/**
 * 实现数组扁平化Array.flat()
* @param {number} depth//维度
 * @returns []
 */
Array.prototype.myFlat = function (depth) {
  let res = [];
  for (let i = 0; i < this.length; i++) {
    let deep = 1;
    if (Array.isArray(this[i]) && deep < depth) {
      const re = arguments.callee.call(this[i], --depth);
      //arguments.calle递归匿名函数,并改变this指向内层数组
      res = res.concat(re);
    } else {
      res.push(this[i]);
    }
  }
  return res;
};

const b = [2, [3, [4, [2, 3], 5]], 4, 5, 6];
console.log("Test flat:", b.myFlat(Infinity));
//使用 Infinity,可展开任意深度的嵌套数组

//TTest flat: [2, 3, 4, 2, 3,5, 4, 5, 6]