Javascript 基于内容位置合并两个词典

Javascript 基于内容位置合并两个词典,javascript,Javascript,我有两本词典,它们记录了同一事件的不同步骤 A: [ { tap red }, { tap blue }, { tap green }, { tap commit } ] B: [ { tap yellow }, { tap blue }, { tap commit } ] 合并后的文件应如下所示: [ { tap yellow }, { tap red }, { tap blue }, { tap green }, { tap commit } ] 黄色和红色,在蓝色之前的A和B中完成,

我有两本词典,它们记录了同一事件的不同步骤

A: [ { tap red }, { tap blue }, { tap green }, { tap commit } ]

B: [ { tap yellow }, { tap blue }, { tap commit } ]
合并后的文件应如下所示:

[ { tap yellow }, { tap red }, { tap blue }, { tap green }, { tap commit } ]
黄色和红色,在蓝色之前的A和B中完成,因此它应该位于
{tap blue}
之前,
{tap green}
位于
{tap commit}
之前,
{tap commit}
始终位于末尾


在JavaScript中实现这一点的最佳方式是什么?

具体取决于您希望它在各种退化情况下的行为方式,但从广义上讲:(粗糙的伪JavaScript)


它循环遍历A的所有项目,并为每个项目检查它是否在B中。如果在B中,它将复制B的最后一个匹配项和当前匹配项之间的所有项目,否则它只复制A。然后它将包含B中到目前为止尚未包含在末尾的所有项目。

应该如何
A:[A,B];B:[B,a]
是否合并?您的语法有问题…我相信字典项看起来像
{tap:'red'}
。假设输入一致,我们是否应该生成一个合并,该合并设置为两个的并集,与两者一致,通过将B中的条目移到A中的条目之前来解决歧义?
var position_B = 0
foreach( A as position_A ) {
    var found_B = B.indexOf( A[position_A], position_B );
    if( found_B !== -1 ) {
        // todo: copy B[position_B] to B[found_B] (inclusive) into Result
        position_B = found_B + 1;
    } else {
        // todo: copy A[position_A] into Result
    }
}
// todo: copy B[position_B] to B[end] (inclusive) into Result