.flat() 不是函数,怎么了?

新手上路,请多包涵

以下代码

function steamrollArray(arr) {
  // I'm a steamroller, baby
  return arr.flat();
}

steamrollArray([1, [2], [3, [[4]]]]);

回报

arr.flat 不是函数

我在 FirefoxChrome v67 中尝试过,结果相同。

怎么了?

原文由 TechnoKnight 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 352
2 个回答

flat 方法 尚未在常见浏览器中实现(仅 Chrome v69、Firefox Nightly 和 Opera 56)。这是一项实验性功能。因此您 不能使用它。

您可能希望拥有自己的 flat 函数:

 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)
);

代码取自 Noah Freitas这里 获取的代码,最初是为了在没有指定 depth 的情况下展平数组。

原文由 Ivan 发布,翻译遵循 CC BY-SA 4.0 许可协议

这也可以工作。

 let arr = [ [1,2,3], [2,3,4] ];
console.log([].concat(...arr))

或者对于较旧的浏览器,

 [].concat.apply([], arr);

原文由 dubucha 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题