将数组中的值附加到 BehaviorSubject

Posted

技术标签:

【中文标题】将数组中的值附加到 BehaviorSubject【英文标题】:Append values from array to BehaviorSubject 【发布时间】:2017-08-19 08:54:21 【问题描述】:

我有一个 EvaluateHistoryItem[] 类型的 BehaviourSubject history$。在uploadFile 方法中,我用逗号分割上传的.txt 文件,然后将它们推送到resultSet[]。我想将 resultSet[] 中的值附加到 history$ BehaviorSubject。

我是 RxJS 的新手,发现它很复杂(仍在努力)。我会很感激一些帮助。


我尝试了类似的方法,但它不正确,因为我不想映射,而是附加新值(我认为它应该是 combineLatest 的东西):

 history.map(a => 
                a.saved = this.convertToBool(resultSet[0]);
                a.evaluate = resultSet[1];
                a.result = resultSet[2];
                a.runTimeMs = Number(resultSet[3]);
                a.tags.map(tag => tag.value = resultSet[4]);

            );
 this.history$.next(history);

ps。如果问题的标题不好,请见谅。


这是我的代码:

interface EvaluateHistoryItem 
evaluate: string;
error?: string;
result?: string;
runTimeMs?: number;
saved?: boolean;


export class EvaluateComponent implements OnInit, AfterViewInit 
   ...  ...  ...
   ...  ...  ...
   public history$ = new BehaviorSubject<EvaluateHistoryItem[]>([]);
   ...  ...  ...
   public uploadFile(element: any) 
       let uploadedFile = document.getElementById('uploadedFile');
       let files: File[] = element.srcElement.files;
       let file: File = files[0];

       let reader = new FileReader();

       let resultSet: string[] = [];

       reader.onloadend = (result) => 
           // replace new lines with commas and then split upon commas but not the ones inside quotes
           let columns: string[] = reader.result.replace(/\n/g, ',').split(/,(?=(?:(?:[^"]*")2)*[^"]*$)/);

           for (let i = 0; i < columns.length - 1; i++) 
               resultSet.push(columns[i]);
           
       ;

    let history: EvaluateHistoryItem[] = this.history$.getValue();
    // ... here I need to map values from resultSet
    // ....
    this.history$.next(history);
  

【问题讨论】:

resultSet.splice(0, 4) 将删除前四个元素。 【参考方案1】:

我在您的问题中看到的关键字是skipbufferCount

resultSet
  .skip(4) /* first four emissions */
  .bufferCount(4)
  .map(buffer => (
    save: buffer[0],
    evaluate: buffer[1],
    result: buffer[2], 
    runTimeMs: buffer[3] 
  ))
  .subscribe(console.log);

【讨论】:

我不能跳过 resultSet 因为 resultSet 只是一个字符串数组。为了解释更多,我想将 resultSet 中的值推送到 EvaluateHistoryItem[] 类型的 hisotory$ 中。

以上是关于将数组中的值附加到 BehaviorSubject的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pymongo 将新的值数组附加到 mongodb 中的现有数组文档?

BehaviorSubject 添加相同的值

常用函数

使用 BehaviorSubject 的测试中的 TimeoutException - BLoC

array_merge — 合并一个或多个数组

array_merge — 合并一个或多个数组