JavaScript Array flat 函数未在 React native 中定义

Posted

技术标签:

【中文标题】JavaScript Array flat 函数未在 React native 中定义【英文标题】:JavaScript Array flat function doesn't define in React native 【发布时间】:2019-03-22 22:16:48 【问题描述】:

我正在编写一个基于react-native 的应用程序,我们知道我们可以在这个项目和所有react 项目中使用javascript 代码。

但是当我使用下面的代码时,转译器会返回 Error 给模拟器:

const mixer = (...arg) => arg.flat(9);

错误是:flat is not function

为什么在react-native 中没有定义但在浏览器中运行良好?

【问题讨论】:

可能在用户代理中没有实现。 @NinaScholz,非常感谢,但是哪个用户代理? 可能转译器在哪里运行...? 【参考方案1】:

React Native 使用 JavaScriptCore 引擎,该引擎使用 ECMA-262 规范。规范清楚地表明 .flat 不受支持,并且它不包含在 babel 的转换列表中。

自己编写或安装 npm 上提供的众多 shim 之一。

【讨论】:

哦,非常感谢您的澄清。我基于 reduce 和 Array concat 函数编写了自己的函数。但我想知道为什么它不支持,谢谢。【参考方案2】:

用这个函数代替arr.flat试试

function flatten(arr) 
    return Array.prototype.concat(...arr);


flatten(arr)

【讨论】:

其实我的确切问题不是函数。我说为什么。另一方面,您的答案不正确,因为它只是平坦的一楼深度。我知道如何递归编写它,我使用了JavaScriptreduce 函数,但我想为什么 FLAT 不能在那里工作? 哦,在这种情况下,打开下面的链接检查 cmets ***.com/questions/52283892/…【参考方案3】:

您的平台是否支持它? Array.prototype.flat

Link 还包含使用 reduce 和 concat 以及非递归的实现。

【讨论】:

请查看 OP 的帖子:为什么在浏览器中运行良好 请看我的问题,最后一句,我说为什么react-native中没有定义? 嗯,它是一个普通的数组函数,并没有在任何地方实现。它根本不是本机反应,它是纯 JavaScript。而且我猜你的 react native 正在一个不受支持的平台上执行?【参考方案4】:

const mixer = (...arg) => arg.flat(9);

错误是:flat is not function

为什么在react-native 中没有定义但在浏览器中运行良好?

我的第一个猜测是react-native 转译器没有正确解释您的...arg,导致对象不是Array 类型。您正在尝试调用.flat,它是Array.prototype 的一部分。由于arg 不能是Array 类型,因此无法找到.flat,从而导致该错误。

虽然我不确定。你能检查对象类型吗?您可以在下面暂时使用此代码。

const mixer = (...arg) =>  console.log(typeof arg); return []; 

它说什么?如果它显示Array,那么您可能在尚不支持该功能的平台上操作。在这里使用 polyfill 可以解决您的问题。

【讨论】:

react-native转译器解释了...arg,它无法理解flat是什么。

以上是关于JavaScript Array flat 函数未在 React native 中定义的主要内容,如果未能解决你的问题,请参考以下文章

使用泛型制作 Array.flat(1) 的 Typescript 包装器

JavaScript:ES2019 的新特性

[Javascript] Automate the process of flattening deeply nested arrays using ES2019's flat method(

ES10(2019)Array扩展 flat / flatMap

JavaScript 中带有 new Array() 的未定义值

重构map重构filter重构Some重构reduce方法重构flat函数