Добавить значения из массива в BehaviorSubject

У меня есть BehaviourSubject history$ типа EvaluateHistoryItem[]. В методе uploadFile я разделяю загруженный файл .txt запятыми, а затем помещаю их в resultSet[]. Я хочу добавить значения из resultSet[] в history$ BehaviorSubject.

Я новичок в RxJS и считаю его сложным (все еще работаю над этим). Буду признателен за помощь.


Я пробовал что-то вроде этого, но это неправильно, так как я не хочу сопоставлять, а добавляю новые значения (я думаю, это должно быть что-то с combLatest):

 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);

пс. Извините, если название вопроса не подходит.


Вот мой код:

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);
}  

person Devid    schedule 26.03.2017    source источник
comment
resultSet.splice(0, 4) удалит первые четыре элемента.   -  person Devid    schedule 27.03.2017


Ответы (1)


Ключевые слова, которые я прочитал в вашем вопросе: skip и bufferCount .

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);
person Mark van Straten    schedule 26.03.2017
comment
Я не могу пропустить набор результатов, так как набор результатов - это просто массив строк. Чтобы объяснить немного больше, я хочу поместить значения из набора результатов в hisotory$, который имеет тип EvaluateHistoryItem[]. - person Devid; 26.03.2017