我想根据第一个的值对两个流进行分组和组合。举一个具体的例子说明,
每当第一个流发生变化时,我想将值与第二个流组合,但跳过下一个值(即图中的值1,3和6)。
我在iOS上使用ReactiveCocoa,但欢迎使用其他反应框架的示例。
答案 0 :(得分:2)
在javascript中,它会像(未经过测试):
const result$ = a$.flatMapLatest(a => b.skip(1).map(b => {a,b}))
这应该是做什么的:
你有限制:
顺便提一下好的图。
答案 1 :(得分:1)
我目前在ReactiveCocoa中的实现:
var cook = MutableProperty("")
var ingredient = MutableProperty("")
cook.signal.observeNext { cook in
print(">", cook)
}
let skipFirst = cook.signal
.flatMap(.latest) { cookValue in
return ingredient.signal
.map { ingredientValue in
"\(cookValue) \(ingredientValue)"
}
.skip(first: 1)
}
skipFirst.observeNext { str in
print(">>", str)
}
// Send values
cook.value = "grill"
ingredient.value = "asparagus"
ingredient.value = "beef"
cook.value = "fry"
ingredient.value = "ice cream"
ingredient.value = "donut"
ingredient.value = "shoe"
cook.value = "steam"
ingredient.value = "egg"
ingredient.value = "lettuce"
打印:
> grill
>> grill beef
> fry
>> fry donut
>> fry shoe
> steam
>> steam lettuce
但这意味着如果我还想使用每个组的第一个值,我必须重复flatMap
转换,这看起来并不是很干。
cook.signal
.flatMap(.latest) { cookValue in
return ingredient.signal
.map { ingredientValue in
"\(cookValue) \(ingredientValue)"
}
.take(first: 1)
}
.observeNext { str in
print("**>", str)
}