【问题标题】:Observable function to returned a chunked array可观察函数返回一个分块数组
【发布时间】:2016-07-19 05:29:07
【问题描述】:

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

【问题讨论】:

  • 你能发布你已经拥有的代码吗?我不是 100% 同意你使用的符号。

标签: javascript rxjs rxjs5


【解决方案1】:

我不完全确定你在这里的目的是什么,但我试了一下:

// 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 这样的偶数流。我希望这接近你想要的,你的问题并不完全清楚。

【讨论】:

    猜你喜欢
    • 2019-02-25
    • 2019-10-26
    • 1970-01-01
    • 2020-12-10
    • 2019-11-20
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    相关资源
    最近更新 更多