javascript - React-Native - 通过嵌套对象崩溃递归

标签 javascript reactjs typescript recursion react-native

我从 ( Iterate through Nested JavaScript Objects ) 中获取了以下函数,并在一个普通的 CRNA 项目中实现:

var findObjectByLabel = function(obj, label) { 如果(obj.label === label){ return obj; } 对于(obj 中的变量 i){ 如果(obj.hasOwnProperty(i)){ var foundLabel = findObjectByLabel(obj[i], label); 如果(找到的标签){ 返回找到的标签; } } } 返回空值; };

当我尝试在构造函数或任何生命周期方法中执行此代码时,应用程序因超出最大调用堆栈大小而崩溃。这在RN中是不允许的吗?我必须将其转换为迭代版本吗?

最佳答案

如果您为上述功能考虑以下场景,您就会明白它为什么会出错:

type Node = { link: Node; value: number; };
const x: Node = { link: null, value: 0 };
const y: Node = { link: x, value: 1 };
x.link = y;

findObjectByLabel(x, 'foo');

因为存在循环引用,您的递归将无限进行,您将达到最大调用堆栈大小。

您的对象结构中可能存在某种循环引用,使您遇到此问题。

如果你能保证所有命中的对象都有一个非空的 label 并且标签是唯一的,你就可以跟踪 seenLabels 而不是递归到一个对象中您已经看到了标签。

关于javascript - React-Native - 通过嵌套对象崩溃递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48573769/

相关文章:

javascript - 来自 Json 的短 HTML 代码将显示 HTML 代码而不是呈现的版本

javascript - 在不同项目中导入和使用时,componentDidMount 函数不起作用

node.js - 如何在node.js中请求类文件

javascript - HTML:未提交文本输入

丹麦语字符串的 JavaScript UTF-8 编码问题

reactjs - 使用 redux 形式时如何将 Dispatch 传递给操作

reactjs - 使用 gulp-react 进行非法进口申报

css - Angular SlickGrid 是否可以使用分页并根据值设置行颜色?

javascript - 将字符串转换为日期而不考虑时区 - Typescript

javascript - Three.js:无法使用 THREE.ExtrudeGeometry 打洞(切割)线形状