2017-07-28 85 views
0

我瞭解如何使用一個關鍵字過濾對象數組中的單個屬性。我目前有一個過濾器服務,通過一個單一的關鍵字,通過一個屬性過濾出一個對象數組,但我無法弄清楚如何在一個對象數組上使用多個關鍵字。這是我到目前爲止有:Typescript通過多個關鍵字過濾字符串數組的對象陣列

我有一個接口餐廳這就是對象的數組是:

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

現在我所說的name屬性有過濾器,我想要做的是使用服務類中的首選項數組來過濾餐館的標籤數組屬性。

@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,打字稿及網絡開發作爲一個整體,所以任何幫助或指針朝着正確的方向將不勝感激。非常感謝您的寶貴時間。

編輯:
我認爲我的問題不清楚,在內循環中我需要循環並檢查首選項列表中的每個值,但我不想將它與「restaurant.name」屬性進行比較,我想將它與「tags」數組屬性中的所有值進行比較。對不起,溝通不暢。

回答

1

你可以像下面這樣做

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

我把墨西哥和巴西在首選項列表,你可以添加你想要的。

希望有幫助!

+0

我認爲我的問題還不清楚,在內循環中我需要循環查看喜好列表,就像你正在做的一樣,但我不想將它與「restaurant.name」屬性進行比較,我想要將其與「tags」數組屬性中的所有值進行比較。對不起,溝通不暢。 – Biggytiny

+0

你使用AngularJS爲你的應用程序? –

+0

是的,我目前使用AngularJS – Biggytiny