我的角度專案中有這個可觀察的物件,它具有這種型別:
export interface FavoritesResponse {
wallet: boolean;
deposit: boolean;
withdraw: boolean;
transfer: boolean;
exchange: boolean;
ticket: boolean;
account: boolean;
}
我想array從這個物件中提取一個只有具有 value 的屬性true。
例如,如果我的收藏夾物件如下所示:
favorites$ = {
wallet: true;
deposit: true;
withdraw: false;
transfer: false;
exchange: false;
ticket: true;
account: true;
}
我想讓我的 enabledFavorites$ 看起來像這樣:
enabledFavorites$ = [
wallet,
deposit,
ticket,
account
]
如,將其轉換為陣列,并且只有值為 true 的鍵。我怎樣才能做到這一點?我知道解決方案可能包含一個 rxjs 管道,地圖,但我不知道我應該做什么。
uj5u.com熱心網友回復:
如果您的意思是說 observable 發出一個型別的物件,FavoritesResponse并且您希望僅使用 value 將發射轉換為它的鍵陣列true,您可以使用
- RxJS
map運算子轉換傳入的物件 Object.keys()用于Array#filter執行實際轉換的本機 JS 方法
enabledFavorites$: Observable<string[]> = favorites$.pipe(
map((favs: FavoritesResponse) =>
Object.keys(favs).filter((key: string) => !!favs[key])
)
);
uj5u.com熱心網友回復:
get favoritesArray$(): Observable<string[]> {
return this.favoritesSettings$.pipe(
map((favorites) => {
const _items = Object.keys(favorites);
const _result: string[] = [];
_items.forEach((item) => {
if (!!(favorites as any)[item]) {
_result.push(item);
}
});
return _result;
})
);
}
uj5u.com熱心網友回復:
所以我想你想要的是轉換Observable<FavoritesResponse>為Observable<string[]>包含string[]檢查的鍵。
一種方法可能是:
const enabledFav$ = favOptions$.pipe(
map(resp => {
let result = [];
Object.keys(resp).forEach(key => {
if (resp.key) {
result.push(key);
}
});
return result;
})
);
我不知道這種情況,但這基本上是代碼。
這enabledFav$是Observable<string[]>和 favOptions$ 是Observable<FavoritesResponse>
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/477815.html
標籤:javascript 有角度的 打字稿 rxjs 可观察的
上一篇:如何為多個步驟創建后退按鈕?
