2014-08-30 1 views
1

Bacon을 사용하여 단일 EventStream의 불규칙 타임 스탬프와 시간 시리즈를 결합하고 싶습니다. 각 이벤트는 주어진 시간에 각 시계열의 마지막 값을 포함합니다. 여기 은 예에게 있습니다bacon.js의 시계열 정렬

var ts1 = new Bacon.fromArray([ 
    [1,2], //Each array is an event,i.e here timestamp is 1 and value is 2 
    [2,3], 
    [5,9] 
    ]) 

var ts2 = new Bacon.fromArray([ 
    [4,2], 
    [9,3], 
    [12,9] 
    ]) 

내가하고 싶은 것은 나는 그것이 Bacon.update을 사용하지만 난 아주 멀리 가지 않았다 구현하는 노력이

var ts12 =[ 
    [1,2,undefined], //At time 1, only ts1 was defined 
    [2,3,undefined], 
    [4,3,2],   //at time 4, we take the last value of ts1 (3) and ts2 (2) 
    [5,9,2], 
    [9,9,3], 
    [12,9,9], 
] 

같은 것입니다. 어떻게 문제에 접근하겠습니까?

+1

예제에 나와있는대로이 시계열을 모두 미리 사용할 수 있습니까? 아니면 해당 값이 런타임에 이벤트로 도착합니까? 전자의 경우에는 Bacon을 건너 뛰고 단순히 두 배열을 병합하는 것이 더 쉬울 수도 있습니다. –

답변

1

시간 매개 변수 값이 시간 매개 변수의 값으로 값으로 도착한다고 가정합니다. 따라서 내 코드에서 Bacon.later로 변경하십시오.

var ts1 = new Bacon.mergeAll([ 
    Bacon.later(100, [1,2]), 
    Bacon.later(200, [2,3]), 
    Bacon.later(500, [5,9]) 
]) 

var ts2 = new Bacon.mergeAll([ 
    Bacon.later(400, [4,2]), 
    Bacon.later(900, [9,3]), 
    Bacon.later(1200, [12,9]) 
]) 

var ts12 = ts1.toProperty(null).combine(ts2.toProperty(null), function(v1, v2) { 
    if(v1 && v2) { 
     return [Math.max(v1[0], v2[0]), v1[1], v2[1]] 
    } else if(v1) { 
     return [v1[0], v1[1], undefined] 
    } else if(v2) { 
     return [v2[0], undefined, v2[1]] 
    } 
}).changes() 

ts12.log() 

해결 방법은 JSfiddle입니다.