javascript - 可观察函数返回分块数组

标签 javascript rxjs rxjs5

我有一个返回类似 Observable<[number, Array<DataItem>]> 的函数。是否可以编写一些返回 Observable<[number, Array<PageWithDataItems>] 的函数使用一些 Observable 函数,给定一个函数 chunk (根据页面大小对 DataItem 数组进行分块)和一个简单的构造函数,该构造函数使用分块的 DataItem 数组创建 PageWithDataItems。 我拥有的是一些订阅 Observable<[number, Array<DataItem>]> 的代码然后创建一个新的 Observable,但我希望可以对 map, mapTo, switchMap 做同样的事情或类似的。我对所有 Observable 函数有点迷失,有什么帮助吗?

最佳答案

我不完全确定你在这里要做什么,但我试了一下:

// stream would be your data... just random chunks of numbers as an example here.
const stream = Rx.Observable.range(0, 480).bufferWithCount(100).select(d => [Math.random() * 100, d]);

class DataChunk<T> {
    constructor(public data: Array<T>) { }
}

const pageSize = 10;

stream
    // I do not understand what the 'number' in your [number, Array<DataItem>]
    // represents. But it is the 'someNumber' item here.. 
    .map(d => ({someNumber: <number>d[0], data: <number[]>d[1]}))
    .map(d => ({
        someNumber: d.someNumber,
        pages: Ix.Enumerable
            .fromArray(d.data)
            .select((item, idx) => ({ pageNr : idx % pageSize, item: item }))
            .groupBy(i => i.pageNr)
            .select(pageItems => new DataChunk(pageItems.select(i => i.item).toArray()))
            .toArray() 
    }))
    .subscribe(dataInfo => {
        // here each dataInfo sent down the stream will have been split up in to chunks
        // of pageSize
        log('Data recieved: ');
        log('  someNumber: ' + dataInfo.someNumber);
        log('  page count: ' + dataInfo.pages.length);
    });

jsfiddle 上的工作示例.

我用了IxJS进行分块。它的工作原理与 RxJS 类似,但对集合(例如数组)进行操作,而不是像 RxJS 那样对事件流进行操作。我希望这接近您想要的,您的问题并不完全清楚。

关于javascript - 可观察函数返回分块数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38450193/

相关文章:

javascript - 如何按用户选择的特定类别进行搜索

javascript - RXJS:我可以根据单个输出的条目顺序交错多个流吗?

javascript - 使用 RxJs Observable 实现延迟队列

angular - 从 rxjs 导入 Observable 的最佳方式

RxJs - 多个订阅者等待相同的 promise 结果

javascript - 主干单击事件未触发

javascript - 正则表达式在 Javascript 中转换 URL

JavaScript - 使用对象原型(prototype)来扩展方法的使用?

Angular2 可观察共享不起作用

javascript - 意外的 Firebase Firestore 集合订阅行为