У меня есть 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);
}