0

我有两个字典,它们记录了同一事件并采取了不同的步骤。

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 中完成,因此它应该位于 before { tap blue }{ tap green }is before{ tap commit }{ tap commit }始终位于末尾。

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

4

1 回答 1

1

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

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

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

于 2013-04-13T19:23:44.993 回答