由于我对Observables和RXJS很陌生,我想问一个问题: 模拟哈希/数组操作的最佳方法是什么,例如在哈希/数组中添加和删除项目?
我有以下代码片段按预期工作但可能不遵循Observable"方式":
var newMessage = new Rx.Subject(),
removeMessage = new Rx.Subject(),
sortMessages = new Rx.Subject(),
messages = Rx.Observable.merge(
newMessage.map(function(x) {
return {
action: 'add',
value: x
};
}),
removeMessage.map(function(x) {
return {
action: 'remove',
value: x
};
}),
sortMessages.map(function(x) {
return {
action: 'sort',
value: true
};
})
)
.scan(function(acc, operation) {
switch (operation.action) {
case 'add':
acc.push(operation.value);
break;
case 'remove':
var removeIndex = acc.indexOf(operation.value);
if (removeIndex !== -1) {
acc.splice(removeIndex, 1);
}
break;
case 'sort':
acc.sort(function(a, b) {
return a > b;
});
break;
}
return acc;
}, []);
var subscription = messages.subscribe(
function(x) {
console.log('next ' + x);
},
function(err) {
console.log('Error: %s', err);
},
function() {
console.log('Completed');
});
newMessage.onNext(4);
newMessage.onNext(2);
newMessage.onNext(1);
removeMessage.onNext(2);
removeMessage.onNext(1);
newMessage.onNext(3);
sortMessages.onNext(true);

<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.0.1/rx.all.js"></script>
&#13;
我希望能够通过各种主题推送任意类型的通知(添加,删除,排序,查找)并检索最终结果,这是我已经提交的所有过去指令的总和(没有流从头开始经历所有指令,这是不好的表现。)
使用数组和散列的经典方法似乎更简单,但是必须有一个适当的Observables方法,不是吗?
答案 0 :(得分:2)
好的,我已经参与了这个Angular2-rxjs-chat演示,它以非常优雅的方式完成了我正在寻找的东西。
为了简化它们,它们使用动作或操作流(插入,标记等),每个动作或操作都是一个Subject,在扫描Observable中调用并改变列表的最后状态。
这是以最平坦和最通用的方式完成的。 路要走!