基于另一个数组过滤打字稿数组

jaz*_*000 4 arrays typescript angular

有几个基于简单数组的例子,但我有 2 个对象数组,似乎无法让它工作。

getAvailableApplications() : Application[]
  {
  var list;
  if (!this.userSettings)
    list = this.applications;
  else
    list =  
      this.applications.filter(x=>
      this.userSettings.modules.filter(y=>
       x.entityId === y.moduleId
     ));

return list;    
}
Run Code Online (Sandbox Code Playgroud)

尽管我在 userSettings.modules 数组中有一个元素,但这总是返回应用程序的完整列表,而不是删除不在 userSetting.modules 数组中的应用程序。

我也尝试在没有 lambda 的情况下重写,但它似乎无法识别模块级 userSettings 变量

      this.applications.filter(function (x){
    return this.userSettings.filter(function(y){
        return x.entityId === y.moduleId;
    })
Run Code Online (Sandbox Code Playgroud)

userSettings 被声明为any,但被分配一个值,如

  userSettings = {"settings":{"modules":[{"moduleId":"b37f590de59943278e7f9b2137c0c232",
  "order":0}]}
Run Code Online (Sandbox Code Playgroud)

应用程序声明如下:

 applications : Application[]
Run Code Online (Sandbox Code Playgroud)

bug*_*ugs 7

如果我理解正确,这就是您想要实现的目标,不需要使用两个过滤器。

list = this.applications
  .filter(x => this.userSettings.modules.map(y => y.moduleId).includes(x.entityId));
Run Code Online (Sandbox Code Playgroud)

参见示例:

list = this.applications
  .filter(x => this.userSettings.modules.map(y => y.moduleId).includes(x.entityId));
Run Code Online (Sandbox Code Playgroud)