2013-04-13 33 views
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都这样做,应该{ tap blue }前定位,{ tap green }{ tap commit }面前,{ tap commit }总是在结束。

在JavaScript中实现它的最佳方式是什么?

+0

'A:[a,b]; B:[b,a]'被合并? –

+0

您的语法有问题... – ShuklaSannidhya

+0

我相信字典项目看起来像'{tap:'red'}'。 –

回答

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中的所有内容,这些内容到目前为止还没有包括在内。