Вы можете использовать .map()
в массиве для выполнения функции для каждого элемента массива и вернуть что-то для этого. Итак, возьмите каждую строку в вашем массиве и используйте ее как ключ для получения значения из вашего объекта оценки.
const array = ["Bad", "reallyBad", "Good", "Neutral", "Good"];
const ratings = {
"reallyBad": -10,
"Bad": -5,
"Good": 5,
"reallyGood": 10
};
const ratingsArray = array.map(item => ratings[item] || 0);
console.log(ratingsArray);
Вы можете иметь conditionSatisfied
испускать исходное значение вместо логического значения и затем объединять его с наблюдаемой, которая завершается на основе условия:
const source = nonCompletingStream();
const conditionSatisfied = source.pipe(
filter(val => meetsCriteriaToBeFinalValue(val)),
shareReplay(),
take(1)
);
const example = concat(
source.pipe(
takeUntil(conditionSatisfied)
),
conditionSatisfied
)
Здесь продемонстрировано https: // stackblitz. ком / редактировать / rxjs-qydhh3
Изменяя ваш поток на горячее наблюдаемое, вы можете напрямую контролировать его жизненный цикл.
const source = nonCompletingStream().pipe(publish());
Начните подписку, подключив наблюдаемый источник:
const example = source.subscribe(...);
const subscription = source.connect();
И остановите подписку, отменив подписку наблюдаемого источника:
source.pipe(filter(meetsCriteriaToBeFinalValue)).subscribe(() => subscription.unsubscribe());
Живой пример:
[ 1111]const { interval } = rxjs;
const { publish, filter } = rxjs.operators;
const source$ = interval(100).pipe(publish());
const stopCriteria = x => x === 3;
const example$ = source$.subscribe(console.log);
const subscription = source$.connect();
source$.pipe(
filter(stopCriteria)
).subscribe(() => subscription.unsubscribe());
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.3.3/rxjs.umd.js"></script>