gpt4 book ai didi

javascript - Typescript 通过多个关键字过滤具有字符串数组的对象数组

转载 作者:行者123 更新时间:2023-12-03 03:46:35 25 4
gpt4 key购买 nike

我了解如何仅使用一个关键字来过滤对象数组中的单个属性。我目前有一个过滤服务,可以使用单个关键字通过单个属性过滤出对象数组,但我不知道如何在对象数组上使用多个关键字来执行此操作。这是我到目前为止所拥有的:

我有一个餐厅界面,它就是对象数组:

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”属性进行比较,我想将其与所有值进行比较“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;
});
}
}

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

希望有帮助!

关于javascript - Typescript 通过多个关键字过滤具有字符串数组的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45363842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com