簡體   English   中英

打字稿過濾器對象數組,帶有多個關鍵字的字符串數組

[英]Typescript Filter Array of Objects with an Array of Strings by Multiple Keywords

我了解如何僅用一個關鍵字過濾對象數組中的單個屬性。 我目前有一個過濾器服務,該過濾器服務使用單個關鍵字按單個屬性過濾出對象數組,但是我無法弄清楚如何對對象數組中的多個關鍵字進行過濾。 這是我到目前為止的內容:

我有一個餐廳接口,它是對象數組:

export interface Restaurant {
id: number;
name: string;
tags: string[];
}

現在,我具有按名稱屬性進行過濾的功能,我想要做的是根據具有服務類中的一組首選項的標簽屬性數組來過濾餐館。

@Injectable()
export class PreferencesFilterService {


getFilteredRestaurants(list: Restaurant[]): Restaurant[] {
    return list.filter(function(restaurant){
        restaurant.name === "Mexican";
    });
}
}

我需要它來執行如下偽代碼:

@Injectable()
export class PreferencesFilterService {

preferencesList: string[];


getFilteredRestaurants(list: Restaurant[]): Restaurant[] {
    return list.filter(function(restaurant){

      //loop through each restaurants "tags" attribute
      //return an array of restaurants that pass the following test:
      //  --> The restaurant's tags array strings match with at least 1 
      //      of the strings in the preferencesList array


    });
} 
}

我對javascript,Typescript和整個Web開發是一個新手,所以任何對正確方向的幫助或指導將不勝感激。 非常感謝您的寶貴時間。

編輯:
我認為我的問題不清楚,在內部循環中,我需要循環遍歷並檢查首選項列表中的每個值,但是我不想將其與“ restaurant.name”屬性進行比較,而是要將其與所有屬性進行比較“標簽”數組屬性中的值。 對不起,溝通不暢。

你可以這樣

@Injectable()
export class PreferencesFilterService {

    var preferencesList: string[] = ['Mexico', 'Brazil'];

    getFilteredRestaurants(list: Restaurant[]): Restaurant[] {
        return list.filter(function(restaurant) {
            for (let tag in restaurant){
                if (preferencesList.indexOf(restaurant[tag])!=-1){
                    return true;
                }
            }
            return false;
        });
    }
}

我將墨西哥和巴西放在首選項列表中,可以根據需要添加任意數量。

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM