我想过滤一个数组,但过滤功能反应不佳

I want to filter an array but the filter function doesn't respond well

我想用几个元素过滤我的数组,但事实证明 .filter 不起作用,filterInDeep returns 的值有效,但 .filter() applyfilter() 没有考虑 return:

const maquettesListRef = [
    {
        "idMaquette": 1,
        "codeMaquette": "gsgrcs001",
        
        "version": {
            "idVersion": 3,
            "versionG2s": "202110"
        },
        "context": {
            "idContext": 1,
            "libelle": "TP"
        },
        "application": {
            "idApplication": 1,
            "libelle": "nova",

        },
        "baseTemplate": {
            "idBaseTemplate": 1,
            "code": "base_template1",

            "gabarit": {
                "idGabarit": 1,
                "code": "gabarit1",

            }
        },
        "secteur": {
            "idSecteur": 9,
            "libelle": "Prévoyance collective",
            "lstEnfant": []
        },
        "provenance": ""
    },
    {
        "idMaquette": 3,
        "codeMaquette": "gsgrcs002",
        "version": {
            "idVersion": 2,
            "versionG2s": "202107"
        },
        "context": {
            "idContext": 2,
            "libelle": "BATCH"
        },
        "application": {
            "idApplication": 2,

        },
        "baseTemplate": {
            "idBaseTemplate": 1,
            "code": "base_template1",

            "gabarit": {
                "idGabarit": 1,
                "code": "gabarit1",

            }
        },
        "secteur": {
            "idSecteur": 8,
        },
        "provenance": ""
    },
    {
        "idMaquette": 4,
        "codeMaquette": "gsgrcs003",
        "version": {
            "idVersion": 2,
            "versionG2s": "202107"
        },
        "context": {
            "idContext": 3,
            "libelle": "TP/BATCH"
        },
        "application": {
            "idApplication": 2,
        },
        "baseTemplate": {
            "idBaseTemplate": 1,
            "code": "base_template1",

            "gabarit": {
                "idGabarit": 1,
                "code": "gabarit1",

            }
        },
        "secteur": {
            "idSecteur": 8,
            "libelle": "souscription Vie Individuelle",
            "lstEnfant": []
        },
        "provenance": ""
    }
]
const filter = {
    "codeMaquette": "g",
    "version": {
        "idVersion": 1
    }
}

第一次调用 applyFilter() 函数

我的 filtreEnProfondeur 函数在正确的时间 return 向我发送值 truefalse,但在回调时这个不再响应但不 return 预期的数组。

  filterInDeep(object:any,filtre:any){
    return Object.keys(filtre).every((c) =>{
      switch (typeof filtre[c]){
        case "string":
          return (object[c].includes(filtre[c]))
        case "number":
          return (object[c] == filtre[c])
        case "object":
          this.filterInDeep(object[c],filtre[c])
      }
    })
  }


  applyFilter(filter: any) {
  console.log(this.maquettesListRef)
    console.log(filter)
    console.log(this.maquettesListRef.filter((maquette) =>{
      this.filtreEnProfondeur(maquette,filter)
    }))
}

实际return

[]

预计return

[
    {
        "idMaquette": 1,
        "codeMaquette": "gsgrcs001",
        
        "version": {
            "idVersion": 3,
            "versionG2s": "202110"
        },
        "context": {
            "idContext": 1,
            "libelle": "TP"
        },
        "application": {
            "idApplication": 1,
            "libelle": "nova",

        },
        "baseTemplate": {
            "idBaseTemplate": 1,
            "code": "base_template1",

            "gabarit": {
                "idGabarit": 1,
                "code": "gabarit1",

            }
        },
        "secteur": {
            "idSecteur": 9,
            "libelle": "Prévoyance collective",
            "lstEnfant": []
        },
        "provenance": ""
    }
]

它对你不起作用,因为你需要在每次调用中从 filter return bool。并且由于您使用 { },所以您没有 return 任何东西。尝试使用 return:

applyFilter(filter: any) {
  console.log(this.maquettesListRef)
  console.log(filter)
  console.log(
    this.maquettesListRef.filter((maquette) => {
      return this.filtreEnProfondeur(maquette,filter)
    })
  )

这是一个演示您的问题及其解决方案的简化示例:

const arr = [1, 2, 3, 4, 5, 6];

console.log(arr.filter(v => {
  v % 2 == 0
}))
console.log(arr.filter(v => {
  return v % 2 == 0
}))