我理解如何使用一个关键字过滤对象数组中的单个属性。我目前有一个过滤服务,它使用单个关键字通过单个属性过滤掉一个对象数组,但我无法弄清楚如何在一个对象数组上使用多个关键字。这就是我到目前为止所做的:
我有一个接口餐厅,它是对象数组:
export interface Restaurant {
id: number;
name: string;
tags: string[];
}
现在我有了name属性的过滤器,我想要做的是使用带有一组首选项的tags属性数组过滤餐馆。
@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"进行比较。属性,我想将它与"标签中的所有值进行比较。数组属性。对不起,这是错误的沟通。
答案 0 :(得分: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;
});
}
}
我将墨西哥和巴西列入首选项列表,您可以根据需要添加任意数量。
希望有所帮助!