Javascript Typescript通过多个关键字筛选具有字符串数组的对象数组

Javascript Typescript通过多个关键字筛选具有字符串数组的对象数组,javascript,typescript,filter,callback,Javascript,Typescript,Filter,Callback,我了解如何只使用一个关键字过滤对象数组中的单个属性。我目前有一个过滤服务,它通过使用单个关键字的单个属性过滤出一个对象数组,但我不知道如何在一个对象数组中使用多个关键字。这就是我到目前为止所做的: 我有一个界面,这就是对象数组: export interface Restaurant { id: number; name: string; tags: string[]; } 现在我有了name属性的过滤器,我想做的是通过标签数组属性和服务类中的首选项数组来过滤餐厅 @Injectable()

我了解如何只使用一个关键字过滤对象数组中的单个属性。我目前有一个过滤服务,它通过使用单个关键字的单个属性过滤出一个对象数组,但我不知道如何在一个对象数组中使用多个关键字。这就是我到目前为止所做的:

我有一个界面,这就是对象数组:

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、Typescript和整个web开发非常陌生,因此非常感谢您提供的任何帮助或正确方向的指点。非常感谢您抽出时间

编辑:

我想我的问题还不清楚,在内部循环中,我需要循环并检查首选项列表中的每个值,但我不想将其与“restaurant.name”属性进行比较,我想将其与“tags”数组属性中的所有值进行比较。很抱歉沟通不畅。

你可以这样做

@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;
        });
    }
}
我把墨西哥和巴西放在首选项列表中,你可以随意添加


希望有帮助

我想我的问题还不清楚,在内部循环中,我需要像您这样循环并检查首选项列表,但我不想将其与“restaurant.name”属性进行比较,我想将其与“tags”数组属性中的所有值进行比较。很抱歉沟通错误。你的应用程序是否使用AngularJS?