我想过滤一个数组,但过滤功能反应不佳
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 向我发送值 true
或 false
,但在回调时这个不再响应但不 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
}))
我想用几个元素过滤我的数组,但事实证明 .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 向我发送值 true
或 false
,但在回调时这个不再响应但不 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
}))