rx《二》 流的合并

merge 字面意思合并,可以理解为对数据源的合并

    <div><input type="text" id="length"></div>//1222333
    <div><input type="text" id="width"></div>//2244444
      <div id="area"></div>

<script>
const length=document.getElementById('length');
const width=document.getElementById('width');
const area=document.getElementById('area');
const width$=Rx.Observable.fromEvent(width,'keyup').pluck('target','value');
const length$=Rx.Observable.fromEvent(length,'keyup').pluck('target','value');
const area$=Rx.Observable.merge(width$,length$);
area$.subscribe(val=>{
  console.log(val)
})
</script>

输入1,2,12,122.。。。
   2,24,244,2444.。。
可以看出length的值并没有和width的值混合到一起,所以可以称为对数据源的合并

concat

    也是流的合并
    必须在第一个流结束之后 才会对第二个流进行合并
    const length=document.getElementById('length');
const width=document.getElementById('width');
const area=document.getElementById('area');

const width$=Rx.Observable.fromEvent(width,'keyup').pluck('target','value');
const length$=Rx.Observable.fromEvent(length,'keyup').pluck('target','value');

const first$=Rx.Observable.from([1,2,3,4])
const area$=Rx.Observable.concat(first$,width$);
area$.subscribe(val=>{
  console.log(val)
})
1
2
3
4
'1'
'12'
。。。。

startWith(x) 相当于在数组之前添加一个值

const first$=Rx.Observable.from([1,2,3,4]).startWith(0);//用于赋予初值
0
1
2
3
4

combineLatest

const length=document.getElementById('length');
const width=document.getElementById('width');
const area=document.getElementById('area');

const width$=Rx.Observable.fromEvent(width,'keyup').pluck('target','value');
const length$=Rx.Observable.fromEvent(length,'keyup').pluck('target','value');
const area$=Rx.Observable.combineLatest(length$,width$);
area$.subscribe(val=>{
  console.log(val)
})
['1','2']
['1','22']

combineLatest

const length=document.getElementById('length');
const width=document.getElementById('width');

const width$=Rx.Observable.fromEvent(width,'keyup').pluck('target','value');
const length$=Rx.Observable.fromEvent(length,'keyup').pluck('target','value');

const area$=Rx.Observable.combineLatest(length$,width$,
                                        (l,w)=>l*w
);
area$.subscribe(val=>{
  console.log(val)
})

zip和combineLatest的区别 zip中的值需要成对出现

const area$=Rx.Observable.zip(length$,width$,
                                        (l,w)=>l*w
);
area$.subscribe(val=>{
  console.log(val)
})

withLatestForm;

length$.withLatestForm(width$);
第一个为主,当都有初始值的时候,并且length$有变化时开始合并

过滤操作符 debounce debounceTime

debounce:只有当另一个Observable发射值时,才取源Obervable的最新数据进行发射,其他数据取消发射。
debounceTime:一段时间内,只取最新数据进行发射,其他数据取消发射。
.debounceTime(xxx)

distinct 去除重复的值

Rx.Observable.of('A', 'B', 'C', 'A', 'B')
    .distinct( )
    .subscribe( x => console.log( x ))
    ABC

distinctUntilChanged去除连续重复的值

// 去除连续重复的元素,输出A,B,A,B,A
Rx.Observable.of('A', 'B', 'B', 'A', 'B', 'A', 'A')
    .distinctUntilChanged( )
    .subscribe( x => console.log( x ))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值