代码之家  ›  专栏  ›  技术社区  ›  jazza1000

基于另一个数组筛选typescript数组

  •  0
  • jazza1000  · 技术社区  · 6 年前

    有几个基于简单数组的例子,但是我有两个对象数组,似乎不能使它工作。

    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;    
    }
    

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

    我还尝试不使用lambda进行重写,但它似乎无法识别模块级用户设置变量

          this.applications.filter(function (x){
        return this.userSettings.filter(function(y){
            return x.entityId === y.moduleId;
        })
    

    usersettings声明为any,但分配的值如下

      userSettings = {"settings":{"modules":[{"moduleId":"b37f590de59943278e7f9b2137c0c232",
      "order":0}]}
    

    申请声明如下:

     applications : Application[]
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   bugs    6 年前

    list = this.applications
      .filter(x => this.userSettings.modules.map(y => y.moduleId).includes(x.entityId));
    

    const first = [{entityId: 1}, {entityId: 2}, {entityId: 3}];
    const second = [{moduleId: 1}, {moduleId: 3}];
    
    const list = first.filter(x => second.map(y => y.moduleId).includes(x.entityId));
    
    console.log(list);
        2
  •  2
  •   David Faure    6 年前

    this.applications.filter( x => 
        this.userSettings.some(y => 
            x.entityId === y.moduleId;
        )
    )
    

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some