检测复杂对象中的更改

问题描述 投票:1回答:1

我正在用JavaScript编写一个编译器,对于优化器,我遵循通常的模式,其中重复运行优化列表,直到没有任何反应。检测“没有发生”条件的显而易见的方法是,如果成功执行某些操作,则为每个优化设置标记。我想知道是否有更优雅的方式去做。

在摘要中,问题可以这样表达:给定一个复杂的对象(包含许多子对象级别,包括带有循环引用的数组等),通过可能的转换运行它然后检测是否有任何改变。所以问题是是否有一种简单的方法来检测复杂对象的变化。

Watch.js提供了检测对象中的更改的方法,但仅限于顶级,并且如果字段发生更改,即使它随后返回到其原始值,也会触发。

另一种方法是制作对象的深层副本,然后与原始对象进行深度比较。但是,从这里的其他问题来看,深层复制看起来像是一个非常重要的操作,而深度比较则有其自身的挑战。

是否有一个我缺少的优雅技巧,或者我是否应该坚持让每个优化过程都做自己的记账?

javascript deep-copy
1个回答
1
投票

我会发布此评论作为评论,但我没有所需的代表。

我不知道这是否适用于您的情况,但您可以做的是转换为JSON,然后比较字符串:

JSON.stringify(firstObject) === JSON.stringify(secondObject) 

正在环顾四周,发现另一个类似问题的stackoverflow帖子。有一个类似于我的解决方案,但我发现最有趣的是第二个解决方案,没有选择作为答案,我认为它有你需要的:Object comparison in JavaScript

© www.soinside.com 2019 - 2024. All rights reserved.