返回博客

JavaScript Array.prototype.flat() 兼容性处理

本文介绍了如何处理 JavaScript 中 Array.prototype.flat() 方法的兼容性问题,特别是针对不支持该方法的旧版浏览器(例如 Chrome65 及更低版本)的解决方案。提供了 polyfill 代码,可以确保在所有浏览器中都能正常使用 flat() 方法。

Mt.r
|

公司项目上线的时候,我写的一个功能在测试环境突然不能用了,吓得我赶紧看了一下客户用的什么浏览器,好家伙,是 Chrome65

翻出 MDN 文档查一下,Array.prototype.flat(),好家伙,IE 直接所有版本都不支持。

讲真,真的很怕客户用玄学浏览器,好在只有这个问题需要兼容。

Object.defineProperty(Array.prototype, 'flat', {
  value: function (depth = 1) {
    return this.reduce(function (flat, toFlatten) {
      return flat.concat(
        Array.isArray(toFlatten) && depth > 1
          ? toFlatten.flat(depth - 1)
          : toFlatten
      );
    }, []);
  },
});

console.log([1, [2], [3, [[4]]]].flat(2));

赶紧加个垫片压压惊。