以下代码

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

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

返回

arr.flat不是功能

我尝试了FirefoxChrome v67同样的结果也发生了。

怎么了?

答案

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

代码取自这里经过诺亚·弗雷塔斯最初实现以使数组不符合depth指定的。

来自: stackoverflow.com