【发布时间】:2015-09-26 12:48:07
【问题描述】:
这是一个比较复杂的问题,所以不是重复的
我创建了一个JqTree,当用户更改其树结构时,“旧”JSON 和“新”JSON 结构都应该进行比较,并且应该只显示JSON 已更改。
例如:
[{"name":"node1","id":1,"is_open":true,"children":
[
{"name":"child1","id":2},
{"name":"child2","id":3}
]
}]
客户端将child1置于child2下之后
[{"name":"node1","id":1,"is_open":true,"children":
[
{"name":"child2","id":3},
{"name":"child1","id":2}
]
}]
我只想比较它们并检查更改了哪些值并用alert 显示它们,在这种情况下,它将是:
{"name":"child2","id":3},
{"name":"child1","id":2}
到目前为止,我有一个比较它们的小代码:
JSON.stringify(object1) === JSON.stringify(object2); //我知道不太靠谱。
但我正在寻找检查“差异”并从 JSON 中提取它的东西。
提前致谢。
【问题讨论】:
-
计算两个数据结构之间的差异并不是一件简单的事情。 Here's a related stackexchange question.
-
@Pointy 确实如此,但是将它们转换为不同的“类型”并进行比较不是更容易吗?例如,如果我将它们转换为字符串,例如将它们串起来。如果听起来很愚蠢,我很抱歉
-
好吧,你可以这样做,但你会得到一个字符串差异;换句话说,逐个字符的差异。现在您面临着根据数据结构解释结果的问题,(据我了解)是所涉及的实际模型。
-
@Pointy 是的,我明白了。你有什么建议?考虑到我的树不会比我的例子更复杂。
-
您可以编写一个递归函数,逐个节点遍历旧树,与新树进行比较,当发现差异时将该节点添加到集合中,并在最后提醒集合。
标签: javascript jquery json