按2个或更多字符串过滤对象

Far*_*gho 2 javascript typescript

我有2个对象,一个课程列表和一个用户.

课程列表是一个包含很多课程的数组:

[
  {
    "id": 12345,
    "title": "Some title",
    "type": [
      {
        "id": 4700,
        "slug": "someType",
        "name": "someTypeName"
      }
    ],
    "difficulty": [
      {
        "id": 4704,
        "slug": "4",
        "name": "hard"
      }
    ],..
  },
{...}
Run Code Online (Sandbox Code Playgroud)

用户还有一些字段:

{
  "difficulty": 4, // the difficulty->slug
  "type": "someType"  // the type->slug
}
Run Code Online (Sandbox Code Playgroud)

我的任务:

我想找到课程和用户之间的最佳匹配.

在此示例中,用户正在寻找type.slug == someType和a difficulty.slug == 4.slu is始终是搜索词.

我的第一次尝试是:

courseList.filter((course) => {
    if (course.type.indexOf(that.userData.type) != -1) {
        return course; // dont work
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑:我需要在前端显示nameid属性,"slug"始终是搜索词.

Tha*_*uni 6

filter函数需要一个function(在你的情况下是arrow函数)返回一个,boolean所以试试这个:

var filterredList = courseList.filter(course => {
     return course.type.filter(type => type.slug == that.userData.type).length > 0 
         && course.difficulty.filter(difficulty => difficulty.slug == that.userData.difficulty).length > 0
});
Run Code Online (Sandbox Code Playgroud)