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

时间:2018-02-02 00:04:16

标签: javascript reactjs typescript recursion react-native

我在普通CRNA项目中实现了以下函数(Iterate through Nested JavaScript Objects):

var findObjectByLabel = function(obj, label) { if(obj.label === label) { return obj; } for(var i in obj) { if(obj.hasOwnProperty(i)){ var foundLabel = findObjectByLabel(obj[i], label); if(foundLabel) { return foundLabel; } } } return null; };

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

1 个答案:

答案 0 :(得分:1)

如果您考虑上述功能的以下场景,您可以看到它破坏的原因:

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而不是递归到您已经拥有的对象中看到了标签。