首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.flat()不是函数,怎么了?

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

Stack Overflow用户
提问于 2018-06-22 18:07:44
回答 10查看 78.7K关注 0票数 78

以下代码

代码语言:javascript
复制
function steamrollArray(arr) {
  // I'm a steamroller, baby
  return arr.flat();
}

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

返回

arr.flat不是一个函数

我在火狐Chrome v67上试过,同样的结果也发生了。

怎么了?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2018-06-22 18:14:16

在普通浏览器中,flat方法是尚未执行 (只有Chrome v69、Firefox和Opera56)。这是一个实验性的特征。因此,你还不能使用它。

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

代码语言:javascript
复制
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的情况下将数组扁平化。

票数 78
EN

Stack Overflow用户

发布于 2020-03-13 21:58:36

这也是可行的。

代码语言:javascript
复制
let arr = [ [1,2,3], [2,3,4] ];
console.log([].concat(...arr))

或者是旧的浏览器,

代码语言:javascript
复制
[].concat.apply([], arr);
票数 34
EN

Stack Overflow用户

发布于 2019-08-29 16:37:21

通过浏览器,Array.flat不是支持。下面是实现它的两种方法。

作为一个函数,depth变量指定input数组结构的深度(默认为1;使用Infinity尽可能深),而stack是扁平数组,在递归调用时通过引用传递,并最终返回。

代码语言:javascript
复制
function flat(input, depth = 1, stack = [])
{
    for (let item of input)
    {
        if (item instanceof Array && depth > 0)
        {
            flat(item, depth - 1, stack);
        }
        else {
            stack.push(item);
        }
    }
    
    return stack;
}

作为一个多填充,如果您喜欢Array.prototype语法,可以扩展arr.flat()

代码语言:javascript
复制
if (!Array.prototype.flat)
{
    Object.defineProperty(Array.prototype, 'flat',
    {
        value: function(depth = 1, stack = [])
        {
            for (let item of this)
            {
                if (item instanceof Array && depth > 0)
                {
                    item.flat(depth - 1, stack);
                }
                else {
                    stack.push(item);
                }
            }
            
            return stack;
        }
    });
}
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50993498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档