Javascript 使用可随时间变化的二维过滤器阵列过滤数据阵列

Javascript 使用可随时间变化的二维过滤器阵列过滤数据阵列,javascript,arrays,typescript,multidimensional-array,Javascript,Arrays,Typescript,Multidimensional Array,我正在尝试用二维对象过滤器数组过滤对象的数据数组 我的数据数组如下所示: dataArray = [{ Filter_GroupSize: "1" Filter_Time: "5-30" title: "Tools Test 1" }, { Filter_GroupSize: "5-10" Filter_Time: "60-120" title: "Tools test 2" }, { Filter_GroupSize: "5-10"

我正在尝试用二维对象过滤器数组过滤对象的数据数组

我的数据数组如下所示:

dataArray = [{
    Filter_GroupSize: "1"
    Filter_Time: "5-30"
    title: "Tools Test 1"
}, {
    Filter_GroupSize: "5-10"
    Filter_Time: "60-120"
    title: "Tools test 2"
}, {
    Filter_GroupSize: "5-10"
    Filter_Time: "120-240"
    title: "Tools 3"
}, {
    Filter_GroupSize: "10-20"
    Filter_Time: "240-360"
    title: "Tools Test 4"
}]
问题是二维滤波器阵列可以随时间而改变。在我下面的例子中,它的长度是2。但随着时间的推移,它会变得越来越大或越来越小。如果2D过滤器阵列更改,则dataArray也会更改

下面是我的二维过滤对象数组现在的样子

FiltersToApply = [
    [{
        choice: "5-10"
        internalColName: "Filter_GroupSize"
    }, {
        choice: "10-20"
        internalColName: "Filter_GroupSize"
    }],
    [{
        choice: "60-120"
        internalColName: "Filter_Time"
    }, {
        choice: "120-240"
        internalColName: "Filter_Time"
    }]
]
我希望通过数据数组进行过滤,并且只返回具有2D过滤器数组中的“filter\u GroupSize”和“filter\u Time”值的元素。在本例中,我希望在新数组中返回“Tools test 2”和“Tools 3”元素。我需要一个筛选函数,该函数检查“FiltersToApply[0]”,如果找到匹配项,则检查“FiltersToApply[1]”是否与dataArray中的同一元素匹配

我已经完成了以下代码:

            for (let i = 0; i < FiltersToApply.length; i++) {
                console.log(FiltersToApply[i]);
                FiltersToApply[i].forEach((filter) => {
                    var filteredArray: Tool[] = dataArray.filter((item) => {
                        if (item[filter.internalColName] == filter.choice && ((i+1) <= FiltersToApply.length)) {
                            this.nextArray(FiltersToApply[i+1], item);
                        }
                    });
                });
            }
for(设i=0;i{
var filteredArray:Tool[]=dataArray.filter((项)=>{

如果(item[filter.internalColName]==filter.choice&&((i+1)我使用下面的代码片段,基本上将过滤器数组展开,并将它们与属性名称分组,然后根据该名称进行过滤

var数据数组=[{
筛选器_GroupSize:“1”,
过滤时间:“5-30”,
标题:“工具测试1”
}, {
过滤组大小:“5-10”,
过滤时间:“60-120”,
标题:“工具测试2”
}, {
过滤组大小:“5-10”,
过滤时间:“120-240”,
标题:“工具3”
}, {
过滤组大小:“10-20”,
过滤时间:“240-360”,
标题:“工具测试4”
}];
var过滤器应用=[
[{
选项:“5-10”,
internalColName:“过滤器\组大小”
}, {
选择:“10-20”,
internalColName:“过滤器\组大小”
}],
[{
选择:“60-120”,
internalColName:“过滤时间”
}, {
选择:“120-240”,
internalColName:“过滤时间”
}]
];
//展开过滤器数组以获得线性格式,然后按属性分组以组合选项
var filterArr=FiltersToApply.flat().reduce(函数(a,cv){
(a[cv.internalColName]=a[cv.internalColName]| |[]).push(cv.choice);
返回a;
}, []);
var result=dataArray.filter(函数(v){
返回filterArr.Filter\u GroupSize.indexOf(v.Filter\u GroupSize)>-1&&filterArr.Filter\u Time.indexOf(v.Filter\u Time)>-1
});

console.log(result.map(函数(v){return v.title;}))
请添加一个结果。请查看此处: