问题标签 [cyclic-reference]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
171 浏览

php - 将循环依赖项存储在对象中是不好的做法,还是可能会遇到性能问题?

具有周期性参考是不好的做法还是会对性能产生重大影响?例如,添加对象 A 作为对象 B 的属性,然后添加对象 B 作为对象 A 的属性?

一个例子:

这个答案似乎是相似的,但对于 C#。

0 投票
2 回答
312 浏览

javascript - 检测对象 A 中的循环引用在结构上是否与对象 B 中的循环引用相同

我正在实现一个函数,它比较两个 JavaScript 对象的“深度”相等性。现在,这个函数的骨架如下所示:

问题是在它所说的地方放什么// ??? cyclic reference detected。理想情况下,我想说这些对象是深度相等的:

并且这些对象不是深度相等的:

笔记:

  • assert如果其参数为假,则抛出异常。
  • have_all_the_same_properties(x, y)如果和的getOwnPropertyNames列表不相同,则抛出异常。xy
  • is_scalar(x)实际上相同typeof x !== 'object'
  • 为了简洁起见,我在上面的代码中使用了 for-of 循​​环,但是 ES6 功能在实际运行的解释器中不可用。
0 投票
1 回答
156 浏览

javascript - JSON.stringify 循环对象 n^2

我需要 JSON.stringify 一个可能的循环对象,这意味着我必须预处理对象并删除循环。我已经知道n^2 indexOf 解决方案。由于该 javascript 似乎没有公开对象 ID 或内存位置,也没有公开任何对象的通用哈希码,有没有办法使包含检查更快?

0 投票
0 回答
31 浏览

php - 升级到 PHP 5.5 后序列化的奇怪问题,最大循环参考深度?

我有一个相当大的图表,里面充满了 PHP 内存中的循环引用。我正在序列化整个图表以将其存储在请求之间。它在 PHP5.3 上运行良好,但现在我升级到 PHP5.5 并且发生了一些奇怪的事情:

PHP / Apache 在序列化过程中突然崩溃/退出,并且 chrome 显示ERR_CONNECTION_RESETde PHP 日志中没有错误,调试模式下的 Apache 日志中也没有任何内容。

经过相当多的调试后,我注意到如果我将图表做得更小一点,它仍然可以工作。但是,如果我一点一点地重新打开数据,那么如果我重新引入它们,就会出现非常具体的失败点。如果我跳过该特定点并引入其他数据,我仍然可以继续。

不是内存问题

我设置了一个非常高的内存限制:memory_limit = 2048M,就在我介绍崩溃的数据之前,它memory_get_usage()给出了 26M 和memory_get_peak_usage()41M,所以还剩下很多。

不是时间问题

它可能与时间无关,因为它完全在超时设置内,并且当它崩溃时,它实际上崩溃的时间比完成最后一个工作序列化所需的时间要快。

太多的循环引用/循环?

我介绍的导致崩溃的数据在对象方面没有什么特别的。它们都是同一种 PHP 对象(为简单起见,节点和边)。此外,直接围绕我介绍的对象的关系并没有告诉我任何奇怪的事情。我正在考虑的一件事是,一旦引入了“有问题的”数据,序列化算法通过所有对象更改的方式,改变遍历路径并导致某些东西崩溃,因为......太深地需要?

其他一些上限?

我能想到的另一件事是我正在达到其他一些上限。因为问题是:一旦我发现一个“有问题”的数据,我无法重新打开而不会导致崩溃,如果我先关闭其他部分,我可以重新打开它。所以这似乎根本没有指向数据。但是哪个限制?我能够挤出的最大字符串长度是 5.517.365 个字符,根据mb_strlen($string, '8bit'). 但有时字符串大约有 400 万个字符,当我添加一点点时它会崩溃。这仍然可能意味着那一点点数据会导致图的一些更深/更大的部分更快地序列化,从而在内部达到相同的上限?

serialize() 是否使用缓冲区或 tmp 文件之类的东西,还是真的应该只使用“普通内存”?

知道我可能会遇到哪些其他界限吗?和/或哪些设置可以解决它?

0 投票
1 回答
2453 浏览

java - 第三方类中杰克逊无限递归的解决方法

有没有办法以编程方式告诉杰克逊忽略一个属性?例如,按名称。

我的问题是我正在序列化第三方对象,其中一些具有父/子循环依赖关系,导致

因为我不能修改代码,所以打破循环依赖的常用方法对我不起作用。

我正在使用ObjectMapperand ObjectWriter

而且我知道它们是高度可定制的,就像我在片段中的序列化包含和可见性一样,但我找不到他们实现类似的方法

0 投票
5 回答
13121 浏览

java - 使用 MapStruct 进行转换时防止循环引用

今天我开始使用 MapStruct 为我的项目创建我的模型到 DTO 转换器,我想知道它是否自动处理循环引用,但事实证明它没有。

这是我用来测试它的转换器:

这是测试:

Notifica、Avvisinotifica 及其各自的模型是带有 setter 和 getter 的简单 POJO,所以我认为不需要发布代码(Notifica 扩展了 Corrispondenza,如果您想知道的话)

这段代码进入了一个无限循环,这并不奇怪(尽管我希望它能处理这些情况)。虽然我认为我可以找到一种优雅的方式来手动处理它(我正在考虑使用方法@MappingTarget来插入引用的对象),但我想知道是否有某种方法可以告诉 MapStruct 如何自动处理循环引用。

0 投票
1 回答
230 浏览

c++ - 用 std::weak_ptr 和别名构造函数打破循环引用:声音还是有问题?

我还没有在任何主要的 C++ 论坛/博客上找到以下打破循环引用的方法,比如在 GotW 上,所以我想问一下这种技术是否已知,它的优缺点是什么?

从外部看,用户Node不会注意到在getLeftand中使用别名构造函数的技巧getRight,但用户仍然可以确定getParent总是返回一个非空共享指针,因为返回的所有指针都会在 的生命周期内p->get{Left,Right}保持对象处于活动状态*p返回的子指针。

我是否在这里忽略了某些东西,或者这是打破已经记录的循环引用的明显方法?

0 投票
1 回答
139 浏览

scala - 更高种类的链式,可能吗?

我有类似的东西:

有没有更好的方法来处理这种结构?不知何故,使用我的方法,我们可以使用Pto 仅约束到直接父级 Level,但我们已经失去了父级的父级(等等),因此约束不会那么紧。如果不想放弃所有上下文,我将不得不将其更改为:

这是完全不可行的。

我尝试过的任何方法都导致我非法循环引用。这个问题有什么解决办法吗?

0 投票
2 回答
85 浏览

javascript - JavaScript 对象的子对象可以引用自身吗?

我有一个 JavaScript 对象Team和一个Score代表点和其他一些功能的对象。我想知道在将分数存储在团队中的同时将团队存储在分数中是否安全。

这样做的结果是,如果我 log team.score.team.score.team.score.team.score.team.score.points= 0。这对于我正在编程的内容来说是完美的,但是它是否代表一个危险的设置,可能会导致旧版浏览器崩溃或导致任何其他问题?它看起来就像一个无限循环,但 Chrome 似乎处理得很好。

有什么理由我不应该这样做吗?

0 投票
2 回答
70 浏览

python - 对列表中的 x 个空格进行循环引用的代码

我有一个任务来制作一个程序,我在其中得到 m、n 和 k。我应该创建一个带有n*m元素的列表。列表b应该有n*m元素。它是从列表 a 创建的,对于列表的 m 个元素,循环移位 k 到右侧。我知道这解释得不好。示例是:

我目前拥有的是:

谢谢