Javascript 如何实现字符串树的差异?

Javascript 如何实现字符串树的差异?,javascript,string,tree,diff,Javascript,String,Tree,Diff,如何实现解释两个字符串树之间差异的函数?例如: diff(["aaa","bbb",["ccc","ddd"],"eee"], ["aaa","bbx",["ccc","ddd"]]); 此功能应报告“bbb”上的编辑和“eee”的删除。如何实现这样的功能?对于简单的文本差异,您可以将每个树转换为平面文件 将节点转换为线,以便每个子节点前面都有制表符(每层嵌套一个制表符)。然后在两个平面文件上运行diff。例如: ["aaa","bbb",["ccc","ddd"],"eee"]

如何实现解释两个字符串树之间差异的函数?例如:

diff(["aaa","bbb",["ccc","ddd"],"eee"],
     ["aaa","bbx",["ccc","ddd"]]);

此功能应报告“bbb”上的编辑和“eee”的删除。如何实现这样的功能?

对于简单的文本差异,您可以将每个树转换为平面文件

将节点转换为线,以便每个子节点前面都有制表符(每层嵌套一个制表符)。然后在两个平面文件上运行diff。例如:

["aaa","bbb",["ccc","ddd"],"eee"]
变为(转义选项卡和换行符):

如果需要数字度量,请计算diff输出中的行数


如果你想玩得开心,它可以在每个节点上玩,但这需要做大量的工作,这取决于结果的用途。

通过迭代数组并比较元素。此实现可能会让您有一些想法:。以关键字
function
开头,后跟空格,然后是选择用作函数名的有效标识符。然后需要一个左括号,后跟两个有效标识符,用逗号分隔。然后,需要一个右括号,后面是一个大括号。“我会让你从那里拿走的。”系统我不明白讽刺的原因。另外,选民可能会想解释一下?@Dokkat:你之所以会被否决,是因为你自己在解决这个问题上没有表现出任何努力。在这个阶段,“如何实施”是有效的“为我实施”。到目前为止,你已经问了180个问题。我想你应该知道它是怎么工作的。但如果没有,请仔细阅读本页:@Dokkat在每个级别应用类似的东西?虽然如果可以忽略“删除”,但配对比较将获得大部分结果。删除/插入比较困难。
aaaa
bbb
    ccc
    ddd
eee