【问题标题】:Typescript Filter Array of Objects with an Array of Strings by Multiple KeywordsTypescript 通过多个关键字过滤具有字符串数组的对象数组
【发布时间】:2017-07-28 02:20:24
【问题描述】:

我了解如何仅使用一个关键字过滤对象数组中的单个属性。我目前有一个过滤器服务,它使用单个关键字通过单个属性过滤出对象数组,但我无法弄清楚如何在对象数组上使用多个关键字来做到这一点。这是我目前所拥有的:

我有一个接口 Restaurant,它就是对象数组:

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”属性进行比较,我想将其与所有“标签”数组属性中的值。很抱歉造成误会。

【问题讨论】:

    标签: javascript typescript filter callback


    【解决方案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;
            });
        }
    }
    

    我将墨西哥和巴西放在偏好列表中,您可以添加任意数量。

    希望有帮助!

    【讨论】:

    • 我认为我的问题不清楚,在内部循环中我需要像你一样循环并检查首选项列表,但我不想将它与“restaurant.name”进行比较" 属性,我想将它与 "tags" 数组属性中的所有值进行比较。很抱歉造成误会。
    • 你的应用使用 AngularJS 吗?
    猜你喜欢
    • 2018-08-09
    • 2015-03-24
    • 1970-01-01
    • 2021-12-15
    • 2021-10-23
    • 2014-11-20
    • 2019-04-04
    • 2019-12-30
    • 2019-08-20
    相关资源
    最近更新 更多