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)
【讨论】:
其实我的确切问题不是函数。我说为什么。另一方面,您的答案不正确,因为它只是平坦的一楼深度。我知道如何递归编写它,我使用了JavaScript
的reduce
函数,但我想为什么 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] Automate the process of flattening deeply nested arrays using ES2019's flat method(
ES10(2019)Array扩展 flat / flatMap